C# 为什么即使第一个条件为false,IF语句也会遍历所有条件
在c#中,我有这样的IF条件C# 为什么即使第一个条件为false,IF语句也会遍历所有条件,c#,.net,if-statement,jit,C#,.net,If Statement,Jit,在c#中,我有这样的IF条件 if(x != null && x.myprop != "value") { // } 当x为null时,为什么编译器在“&&”运算符之后继续,即使条件保证不满足 如果在x为null时执行x.myprop,我会出现null异常,我知道“?”可以解决问题,但我不明白为什么它会继续。 对不起,我的英语不好。你所解释的是不可能的。null指针异常可能发生在代码的另一部分。在C#中,依靠短路(这就是您所描述的)是非常好的 说明书上说: &&和| |运算符称
if(x != null && x.myprop != "value")
{
//
}
当x为null时,为什么编译器在“&&”运算符之后继续,即使条件保证不满足
如果在x为null时执行x.myprop,我会出现null异常,我知道“?”可以解决问题,但我不明白为什么它会继续。
对不起,我的英语不好。你所解释的是不可能的。
null指针
异常可能发生在代码的另一部分。在C#
中,依靠短路(这就是您所描述的)是非常好的
说明书上说:
&&和| |运算符称为条件逻辑运算符。
它们也被称为“短路”逻辑运算符。。。这个
操作x和y与操作x和y相对应,只是y是
仅当x为真时计算。。。操作x&&y的计算结果为
(bool)x?y:错。换句话说,首先计算x,然后
转换为bool类型。然后,如果x为真,则计算y并
转换为bool类型,这将成为操作的结果。
否则,操作结果为假
所以你不可能看到这种行为
条件AND运算符(&&)对其bool执行逻辑AND
操作数,但仅在必要时计算其第二个操作数
但是,您确定没有错误地使用&operator()
无论第一个运算符是什么,二进制运算符&都会对这两个运算符求值
一的值,与条件AND运算符&&相反
不可能-条件AND运算符(&&)对其布尔操作数执行逻辑AND运算,但仅在必要时计算其第二个操作数。请注意,当x不为空时,x.myprop可能仍然为空。可能您没有使用
&
,而只是使用&
myprop的类型是什么?此类型是否会使过载=如果左操作数(myprop
)为空,则执行code>运算符并引发?或者您使用了&
而不是&&
。您是在询问编译器还是运行时间?因为如果它是第一个,编译器不会(事实上也不能)计算条件。