检查三个布尔值中的一个是否为真的简单方法

时间:2013-04-09 19:24:16

标签: c# .net boolean

我尝试使用以下代码,但据我所知,它只检查前两个变量。

if (var1 || var2 || var3)
{
    // Do something.
}

4 个答案:

答案 0 :(得分:3)

如果您需要来评估所有三个,您可以使用:

if (var1 | var2 | var3)
{
    // Do something.
}

代替。有这样的需要似乎很奇怪,但假设这三个都是吸气剂有副作用的属性......

使用方法可能是:

if (DoWork() | DoDuties() | DoFinalStuff())
{
    // At least one method returned true ("success")
}

无论如何都要调用这三种方法。

答案 1 :(得分:3)

您的代码正在检查三个变量之一是否为真,即

var1 || var2 || var3
如果var1,var2和var3中的任何一个为真,则

为真。这里唯一的subtelty是使用短路逻辑执行实际检查:如果var1为真,则无需检查var2和var3等。

答案 2 :(得分:2)

我觉得其他答案已经涵盖了你需要做的事情,但我想更好地解释发生了什么。

||&&运算符是所谓的“短路”运算符,如果找到满足其需求的条件,它就会停止检查其他元素(它找到的第一个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()为真时执行操作。例如

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
    }
}

由于短暂停留,您永远不会获得NullRefrenceException,因为如果var1.DataAvailable()var1

null永远不会执行

答案 3 :(得分:0)

没有人提到:

| - 二进制OR || - 逻辑OR

让我们假设a = false b = true c=false

a || b || c == true
a | b | c == 0 | 1 | 0 == 1也具有逻辑“真实”值。