I've tried using the following code, but as far as I can tell it only checks the first two variables.
if (var1 || var2 || var3)
{
// Do something.
}
如果您需要评估所有三个,您可以使用:
if (var1 | var2 | var3)
{
// Do something.
}
反而。有这样的需求似乎很奇怪,但假设这三个属性都是吸气剂有副作用的属性......
使用方法可能是:
if (DoWork() | DoDuties() | DoFinalStuff())
{
// At least one method returned true ("success")
}
在任何情况下都会调用所有三个方法。
您的代码正在正确检查三个变量之一是否为真,即
var1 || var2 || var3
如果 var1、var2 和 var3 中的任何一个为真,则为真。这里唯一的微妙之处是实际检查是使用短路逻辑执行的:如果 var1 为真,则不会检查 var2 和 var3 等。
我觉得其他答案已经涵盖了您需要做的事情,但我想更好地解释正在发生的事情。
||
or运算符是所谓的&&
“短路”运算符,如果它找到满足其需要的条件,它将停止检查其他元素(它找到的第一个元素true
或它找到||
的第false
一个元素&&
)。
所以实际上
if(var1 || var2 || var3)
SomeAction();
和做的一样
if(var1)
SomeAction();
else if(var2)
SomeAction();
else if(var3)
SomeAction();
如果您只使用|
而不是||
它将在返回结果之前评估所有成员,类似于此
bool combined = var1;
combined = var2 **OR'ed with** combined;
combined = var3 **OR'ed with** combined;
if(combined)
SomeAction();
短路的一个非常有用的实际用途是在调用成员或方法之前检查 null。在下面的示例中,假设 var1 是一个可能为 null 的变量,并且您需要在var1.DataAvailable()
为 true 时执行操作。例如
if(var1 != null && var1.DataAvailable())
{
//do somthing with var1 when data is available
}
是相同的
if(var1 != null)
{
if(var1.DataAvailable())
{
//do somthing with var1 when data is available
}
}
由于短路,您将永远不会得到 aNullRefrenceException
因为var1.DataAvailable()
永远不会执行 if var1
isnull
没有人提到:
|
- 二元或
||
- 逻辑或
让我们假设a = false
b = true
c=false
a || b || c
== true
a | b | c
== 0 | 1 | 0
==1
也具有逻辑“真”值。