是。在C#
&&和
||被短路,从而评估右侧只有左侧尚不确定结果。运营商
&和
|在另一方面也不短路,并始终评估两侧。
规格说明:
在
&&与||运营商被称为条件逻辑运算符。它们也称为“短路”逻辑运算符。
…
该运算x && y符与该运算符相对应x & y,但y仅当x为true
… 时才进行
运算。换句话说,首先被评估并转换为type 。然后,如果是,进行评估并将其转换为类型,并且这成为操作的结果。否则,运算结果为。x &&y``(bool)x ? (bool)y : false``x``bool``x``true``y``bool``false
(C#语言规范版本4.0-7.12条件逻辑运算符)
的一个有趣的性质
&&,并
||为它们短路,即使他们不上的bool操作,但如果用户重载运营商的类型
&或
|与一起
true和
false运营商。
该操作
x && y的计算方式为T.false((T)x) ? (T)x : T.&((T)x, y),其中T.false((T)x)是在中operator false声明的调用T,而T.&((T)xy)是对选定对象的调用operator&。此外,值(T)x仅应评估一次。换句话说,
x首先要求值并将其转换为type,T然后operator false对结果进行调用以确定是否x绝对是false。
然后,如果x是肯定的话false,则运算的结果是先前计算出的值,以x转换为typeT。
否则,y将对其求值,然后对&先前计算出的要x转换为typeT的值和计算出的y要产生操作结果的值调用所选的运算符。
(C#语言规范版本4.0-7.12.2用户定义的条件逻辑运算符)



