为什么IF语句会迭代所有AND条件,即使第一个条件为假

时间:2018-07-11 12:20:57

标签: c# .net if-statement jit

在C#中,我遇到了这样的IF条件

if(x != null && x.myprop != "value")
{
//
}

当x为null时,即使保证条件不满足,为什么编译器仍在'&&'运算符之后继续执行。

如果x为null时我执行x.myprop,则我有null异常,我知道那是'?'解决问题,但我不明白为什么会继续。 对不起,我的英语不好。

2 个答案:

答案 0 :(得分:5)

&& operator in C# short circuits,因此您可能看不到此行为。

  

条件AND运算符(&&)对布尔执行逻辑AND   操作数,但仅在必要时才求值第二个操作数。

但是,您确定没有误用&运算符(which does not short circuit)吗?

  

二进制&运算符会评估两个运算符,而不考虑第一个运算符   一个人的值,与条件AND运算符&&相反。

答案 1 :(得分:1)

您要解释的是不可能的。 null pointer异常可能发生在代码的另一部分。在C#中,依靠短路(这就是您所描述的)是完全可以的。

规格说明:

  

&&和||运算符称为条件逻辑运算符。   它们也称为“短路”逻辑运算符。 ...   操作x && y对应于操作x&y,除了y为   仅当x为true时才求值...操作x && y的求值为   (布尔)x? (布尔)y:错误。换句话说,x首先被求值,   转换为bool类型。然后,如果x为真,则对y求值,   转换为bool类型,这成为操作的结果。   否则,运算结果为假。