在C#中,我遇到了这样的IF条件
if(x != null && x.myprop != "value")
{
//
}
当x为null时,即使保证条件不满足,为什么编译器仍在'&&'运算符之后继续执行。
如果x为null时我执行x.myprop,则我有null异常,我知道那是'?'解决问题,但我不明白为什么会继续。 对不起,我的英语不好。
答案 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类型,这成为操作的结果。 否则,运算结果为假。