46

在 C# 中,如何指定 OR:

if(this OR that) {do the other thing}

我在帮助中找不到。

更新:

我的代码是:

if (title == "User greeting" || "User name") {do stuff}

我的错误是:

错误 1 ​​运算符“||” 不能应用于 'bool' 和 'string' 类型的操作数 C:\Documents and Settings\Sky View Barns\My Documents\Visual Studio 2005\Projects\FOL Ministry\FOL Ministry\Downloader.cs 63 21 FOL Ministry

4

12 回答 12

95

||是 C# 中的条件 OR 运算符

你可能很难找到它,因为很难搜索你不知道名字的东西。下次尝试在 Google 上搜索“C# Operators”并查看逻辑运算符。

这是C# 运算符的列表。

我的代码是:

if (title == "User greeting" || "User name") {do stuff};

我的错误是:

错误 1 ​​运算符“||” 不能应用于 'bool' 和 'string' 类型的操作数 C:\Documents and Settings\Sky View Barns\My Documents\Visual Studio 2005\Projects\FOL Ministry\FOL Ministry\Downloader.cs 63 21 FOL Ministry

你需要这样做:

if (title == "User greeting" || title == "User name") {do stuff};

OR 运算符以相同的方式计算两边的表达式。在您的示例中,您正在对表达式title == "User greeting"(布尔)和表达式"User name"(字符串)进行操作。这些不能在没有强制转换或转换的情况下直接组合,这就是您收到错误的原因。

此外,值得注意的是,||操作员使用“短路评估”。这意味着如果第一个表达式的计算结果为true,则不会计算第二个表达式,因为它不必是 - 最终结果将始终是true。有时您可以在优化期间利用这一点。

最后一个快速说明 - 我经常用这样的嵌套括号编写我的条件:

if ((title == "User greeting") || (title == "User name")) {do stuff};

这样我可以控制优先级,而不必担心操作的顺序。这里可能有点过分了,但是当逻辑变得复杂时它特别有用。

于 2010-01-28T22:50:31.377 回答
11

OR 运算符是一个双管道:

||

所以它看起来像:

if (this || that) 
{
  //do the other thing
}

编辑: 您的更新尝试不起作用的原因是逻辑运算符必须分隔有效的 C# 表达式。表达式具有操作数,运算符和运算符具有优先顺序。

在您的情况下,首先评估==运算符。这意味着您的表达式被评估为(title == "User greeting") || "User name". || 接下来被评估。由于|| 要求每个操作数都是布尔表达式,它会失败,因为您的操作数是字符串。

使用两个单独的布尔表达式将确保您的||运算符正常工作。

title == "User greeting" || title == "User name"
于 2010-01-28T22:45:52.493 回答
9

你需要

if (title == "User greeting" || title == "User name") {do stuff};
于 2010-01-28T22:52:42.113 回答
9

只是为了完整性,|| 和 && 是 | 的条件版本 和 & 运算符。

对 ECMA C# 语言规范的参考在这里

从规范:

3 操作 x || y 对应于操作 x | y,除了只有当 x 为假时才评估 y。

在该|版本中,双方都进行了评估。

条件版本短路评估,因此允许使用如下代码:

if (x == null || x.Value == 5)
    // Do something 

或者(没有双关语)使用您的示例:

if (title == "User greeting" || title == "User name") 
    // {do stuff} 
于 2010-01-28T22:54:43.623 回答
5

或者是||

并且是 &&

更改问题的更新:

您需要在 if 语句的每个逻辑部分中指定要比较的内容。

if (title == "User greeting" || title == "User name") 
{
    // do stuff
}
于 2010-01-28T22:45:49.930 回答
5

条件或运算符是 ||:

if (expr1 || expr2) {do stuff}

if (title == "User greeting" || title == "User name") {do stuff}

条件(OR)及其部分是布尔表达式。

MSDN 在此处按优先顺序列出了 C# 运算符http://msdn.microsoft.com/en-us/library/6a71f45d.aspx布尔表达式的 MSDN 页面是http://msdn.microsoft.com/en-us/library/dya2szfk.aspx

如果您刚开始学习编程,您应该阅读介绍性文本或教程中的条件语句。这似乎涵盖了大部分基础知识:http ://www.functionx.com/csharp/Lesson10.htm 。

于 2010-01-28T22:46:13.003 回答
3

请参阅C# 运算符以了解 C# 运算符,包括 OR 是||

于 2010-01-28T22:49:51.643 回答
2

这是错误的原因:

if (title == "User greeting" || "User name") {do stuff};

是因为那是说

如果标题等于字符串“用户问候语”

或者只是“用户名”(如果标题等于字符串“用户名”,则不是)。你或之后的部分就像写

if ("User name")

哪个 c# 不知道该怎么办。它无法弄清楚如何从“用户名”中获取布尔值

于 2010-01-28T23:08:51.490 回答
1

格式为 if

if (this OR that) 

this并且that是表达式而不是值。title == "aaaaa"是一个有效的表达式。也不OR是 C# 中的有效构造,您必须使用||.

于 2010-01-28T23:30:47.810 回答
1

在 C#9 中,我们现在可以使用模式组合符“or”、“and”和“not”作为“is”条件检查中的运算符。

有关更多信息,请参阅此

所以你的代码...

if (title == "User greeting" || "User name") {do stuff}

...可以直接写成:

if(title is "User greeting" or "User name") {do stuff}
于 2021-05-19T06:37:49.743 回答
0

你应该使用equal喜欢

if (title.Equals("User greeting") || title.Equals("User name")) 
{ do stuff }
于 2021-12-31T18:25:27.093 回答
-1

或用作“||”

 if(expr1 || expr2)
 {
    do something
 }
于 2016-09-07T08:57:49.790 回答