【发布时间】:2017-01-27 13:35:27
【问题描述】:
我有这样的情况:
if (!(InRange1 || InRange2 || InRange3))
{
//Do Something
}
每个 InRange 变量都是布尔值。
期望的行为是,如果这些值中的任何一个为 False,我想做某事,但它不是那样工作的。在触发事件之前,所有值都必须为 false。
是否需要写成
if (!InRange1 || !InRange2 || !InRange3)
{
//do something
}
而且,无论哪种情况,我都很好奇为什么原始语句不起作用。
【问题讨论】:
-
你试过第二种方法了吗?它奏效了吗?如果它有效,那就是正确的方法。如果您没有尝试过,请尝试一下。最初的声明失败了,因为它完全按照它所说的:
x = (a || b || c); return not x;。总是将复杂的表达式分解成单独的行,这样更容易让你理解。 (另一种选择是记住死去的逻辑学家的骆驼名字,这对你的时间没有好处) -
嗯,是的 - 你的第一个 sn-p 基本上是“找出其中任何一个是否为真,然后反转该结果”。理解为什么是非常重要的。看看表达式
(InRange1 || InRange2 || InRange3)...你认为在各种情况下会产生什么结果?然后请记住,您正在使用!... 反转它,但您正在反转整个结果。 -
当你把
!放在括号前面时,你说的是negate everything that is inside the parenthesis。因此,括号中的true变为false,反之亦然。 -
其他相关问题:Reverse the logic of two “or” statements in JavaScript if query(关于 JavaScript 但布尔逻辑相同)
-
这些描述非常有道理。感谢您的澄清。
标签: c# if-statement multiple-conditions