C# If not (this) Or (this) or (this) - 多个条件 IF/OR
C# If not (this) Or (this) or (this) - Multiple condition IF/OR
我的情况如下:
if (!(InRange1 || InRange2 || InRange3))
{
//Do Something
}
每个 InRange 变量都是布尔值。
期望的行为是如果这些值中的任何一个为 False 我想做某事,但它不是那样工作的。在触发事件之前,所有值都必须为 false。
是否需要写成
if (!InRange1 || !InRange2 || !InRange3)
{
//do something
}
而且,无论哪种情况,我都很好奇为什么原始声明不起作用。
你的第二个假设是正确的。
看看boolean algebra and De 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
}
是等价的。
您可以为此使用 DeMorgan's Law。
你拥有的相当于NOR。根据 DeMorgan 定律,!(A | B | C)
等同于 !A & !B & !C
。
你要的是NAND,所以!(A && B && C)
。这与您正在寻找的完全相同 - !A | !B | !C
.
我的情况如下:
if (!(InRange1 || InRange2 || InRange3))
{
//Do Something
}
每个 InRange 变量都是布尔值。
期望的行为是如果这些值中的任何一个为 False 我想做某事,但它不是那样工作的。在触发事件之前,所有值都必须为 false。
是否需要写成
if (!InRange1 || !InRange2 || !InRange3)
{
//do something
}
而且,无论哪种情况,我都很好奇为什么原始声明不起作用。
你的第二个假设是正确的。
看看boolean algebra and De 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
}
是等价的。
您可以为此使用 DeMorgan's Law。
你拥有的相当于NOR。根据 DeMorgan 定律,!(A | B | C)
等同于 !A & !B & !C
。
你要的是NAND,所以!(A && B && C)
。这与您正在寻找的完全相同 - !A | !B | !C
.