短路运算符

本文关键字:运算符 短路 | 更新日期: 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