短路运算符
本文关键字:运算符 短路 | 更新日期: 2023-09-27 17:52:59
我开始学习c#,在阅读逻辑运算符时,我发现:
||运算符表示逻辑运算符,如果表达式1为TRUE,则表达式2不求值。我对这个例子很好奇:
int x = 5, y = 10;
bool result;
result = (x == 3) || (y != 5);
label12.Text = result.ToString();
如果我们已经知道X的值是5,那么结果(X ==3)怎么可能返回true??因为在这种情况下,左侧操作符返回TRUE。但是如何? ?X =5,应该是X ==5?我误解了什么?有人能用几句话给我解释一下吗?
非常感谢,提前感谢
短路操作意味着这里
result = (x == 3) || (y != 5);
如果x == 3
已经为真,则不计算 y != 5
部分。基本上是因为没有必要这样做——我们已经知道整个表达式为真。
如果x = 5,则两个表达式都求值,因为我们仍然不知道x == 3
之后的完整结果。
更新。也许这个例子的目的会更清楚。考虑以下当然是简化的代码:
var someObj = SomeOperation();
if (someObj != null && someObj.IsActive)
如果SomeOperation()
返回null会发生什么?如果不是因为短路计算这个逻辑语句,这段代码将抛出NullReferenceException
。但是,如果someObj
为null,则不会调用IsActive
。
是"或"。左边为假,所以计算右边为真
让我们来分析一下…
int x = 5, y = 10;
result = (x == 3) || (y != 5);
(x==3)
为假(y!=5)
是true
由于您使用了 ||
,因此条件(x==3)
的第一部分为假,因此我们需要继续评估任何其他条件以确定整体表达式是真还是假…如果第一个表达式为真,我们可以停在这里,因为整个表达式不会随着继续求值而改变,条件的第二部分将被"短路"。
在这种情况下,必须对(y!=5)
求值,它返回true并使表达式的其余部分为true。
如果您使用 &&
来组合条件,则如果任何一方为假,则整个表达式为假。
int x = 5, y = 10;
result = (x == 3) && (y != 5);
由于在本例中(x==3)
为false,因此不需要进行其他求值,结果将被设置为false而不求(y!=5)
短路求值是指当编译器可以确定整个表达式的结果时,立即停止对表达式求值
在你的例子中,当编译器发现表达式x==3
为假时,它不能停止计算,因为表达式的第二部分可能为真。
因此它被迫继续求值,它发现表达式y != 5
为真并且整个表达式变为FALSE || true
参见c#参考
(x == 3)不应该求值为True。(x ==3)求值为False,所以(y != 5)求值,这是true。这就是为什么result是True