是。在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)x
y)是对选定对象的调用operator &
。此外,值(T)x仅应评估一次。
换句话说,x
首先要求值并将其转换为type,T
然后operator false
对结果进行调用以确定是否x
绝对是false
。 然后,如果x
是肯定的话false
,则运算的结果是先前计算出的值,以x
转换为type T
。 否则,y
将对其求值,然后对&
先前计算出的要x
转换为type T
的值和计算出的y
要产生操作结果的值调用所选的运算符。
(C#语言规范版本4.0-7.12.2用户定义的条件逻辑运算符)