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

bai*_*mar 2 c# if-statement multiple-conditions

我的条件如下:

 if (!(InRange1 || InRange2 || InRange3))
{
//Do Something
}
Run Code Online (Sandbox Code Playgroud)

每个InRange变量都是布尔值.

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

是否需要写成

if (!InRange1 || !InRange2 || !InRange3)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

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

EJo*_*ica 10

你可以使用DeMorgan的法律.

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

你想要的是NAND,所以!(A && B && C).这完全等同于您所寻找的 - !A | !B | !C.


Mar*_*ger 5

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

看看布尔代数德摩根定律

您可以写它not(A) OR not(B) or not(C),或者,not(A AND B AND C)

所以

if (!(InRange1 && InRange2 && InRange3))
{
    //Do Something
}
Run Code Online (Sandbox Code Playgroud)

if (!InRange1 || !InRange2 || InRange3)
{
    //Do Something
}
Run Code Online (Sandbox Code Playgroud)

是等价的。