C#如果不是(this)或(this)或(this) - 多个条件IF / OR

时间:2016-09-19 19:04:40

标签: c# if-statement multiple-conditions

我的条件如下:

 if (!(InRange1 || InRange2 || InRange3))
{
//Do Something
}

每个InRange变量都是布尔值。

期望的行为是,如果这些值中的任何一个是假的我想做某事,但它不是那样工作的。在触发事件之前,所有值都必须为false。

是否需要写成

if (!InRange1 || !InRange2 || !InRange3)
{
//do something
}

而且,在任何一种情况下,我都很好奇为什么原始陈述不起作用。

2 个答案:

答案 0 :(得分:9)

您可以使用DeMorgan's Law

你拥有的东西相当于NOR。 !(A | B | C)相当于德摩根定律的!A & !B & !C

你想要的是NAND,所以!(A && B && C)。这与您正在寻找的内容完全相同 - !A | !B | !C

答案 1 :(得分:4)

你的第二个假设是正确的。

查看boolean algebraDe Morgan's law

您可以将其写为not(A) OR not(B) or not(C),或not(A AND B AND C)

所以

if (!(InRange1 && InRange2 && InRange3))
{
    //Do Something
}

if (!InRange1 || !InRange2 || InRange3)
{
    //Do Something
}

是等价的。