Ole*_*ers 10 c# boolean-operations
可能重复:
为什么没有|| =或&& =运算符?
通过纯粹的意外,我今天发现了
a &= GetBool();
Run Code Online (Sandbox Code Playgroud)
是不一样的
a = a && GetBool();
Run Code Online (Sandbox Code Playgroud)
多年来我一定误解了这一点.在第一个例子中,GetBool()即使"a"为假,也执行"".在第二个,它不是.
在C#中有什么东西可以实现"&& ="吗?
在C#中有什么东西可以实现"&& ="吗?
好吧,你可以写
a = a && getBool();
Run Code Online (Sandbox Code Playgroud)
相反...... 说实话,我想不出很多我实际想要做任何不同的事情.即使上述情况也非常罕见,IME.
没有定义复合赋值运算符&&,||或??(明显的"短路"运算符).有关复合赋值运算符的完整列表,请参阅C#4规范的第7.17节;有关复合赋值的确切内容的更多详细信息,请参见第7.17.2节.
从文档中:
使用 &= 赋值运算符的表达式,例如
x &= y
相当于
x = x & y
只不过 x 只计算一次。& 运算符对整数操作数执行按位逻辑与运算,对布尔操作数执行逻辑与运算。
我想说,为了避免在不必要时评估 y,请使用
x = x && y
Run Code Online (Sandbox Code Playgroud)
并避免对 x 求值两次(无论这意味着什么),请使用
x &= y
Run Code Online (Sandbox Code Playgroud)
你不能将两者结合起来。
微观优化(至少对于理论情况),它将是:
if (x) x = y;
Run Code Online (Sandbox Code Playgroud)
如果 x 已经存在,则无需执行任何操作false。