Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
7年前关闭。
Improve this question
如果您在C#中有一个if语句来检查多个条件:
如果 a == 5 条件为假,是否仍会检查 b == 9 ,还是会自动退出,因为无法再通过了?
同样,对于OR if语句:
如果 a == 5 为真,是否仍会检查 b == 9 ?
如果
同样地:
如果
如果要同时对两个操作数求值,请改用
这样做的好处是,您可以编写如果对所有操作数求值都会失败的表达式。这是一个典型的if语句:
如果a为null,则表达式将继续计算
显然,如果将
想要改善这个问题吗?更新问题,以便将其作为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
,但是由于&&
短路,如果a
为null
,则表达式将不计算其余部分,因此不会引发异常。显然,如果将
&&
替换为&
,则如果a
或a.SomeProperty
是null
,它将抛出该异常。