Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

7年前关闭。



Improve this question




如果您在C#中有一个if语句来检查多个条件:
if (a == 5 && b == 9) { ... }

如果 a == 5 条件为假,是否仍会检查 b == 9 ,还是会自动退出,因为无法再通过了?

同样,对于OR if语句:
if (a == 5 || b == 9) { ... }

如果 a == 5 为真,是否仍会检查 b == 9

最佳答案

&&||都是“短路”运算符,这意味着,如果从左操作数知道答案,则不评估右操作数。

这意味着:

a && b

如果b为false,则不会评估a,因为最终答案是已知的。

同样地:
a || b

如果b为true,则不会评估a,因为最终答案是已知的。

如果要同时对两个操作数求值,请改用&|运算符。

这样做的好处是,您可以编写如果对所有操作数求值都会失败的表达式。这是一个典型的if语句:
if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)
    ... use a.SomeProperty.Inner

如果a为null,则表达式将继续计算a.SomeProperty,它将抛出NullReferenceException,但是由于&&短路,如果anull,则表达式将不计算其余部分,因此不会引发异常。

显然,如果将&&替换为&,则如果aa.SomePropertynull,它将抛出该异常。

10-02 01:56
查看更多