&#=在C#中?(布尔表达式)

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#中有什么东西可以实现"&& ="吗?

Jon*_*eet 6

在C#中有什么东西可以实现"&& ="吗?

好吧,你可以写

a = a && getBool();
Run Code Online (Sandbox Code Playgroud)

相反...... 说实话,我想不出很多我实际想要做任何不同的事情.即使上述情况也非常罕见,IME.

没有定义复合赋值运算符&&,||??(明显的"短路"运算符).有关复合赋值运算符的完整列表,请参阅C#4规范的第7.17节;有关复合赋值的确切内容的更多详细信息,请参见第7.17.2节.


Ste*_*ger 4

文档中:

使用 &= 赋值运算符的表达式,例如

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

  • “评估一次”适用于更复杂的情况,例如,如果您有 `x[i+3] = x[i+3] & y;` 那么 `i+3` 显然会被计算两次! (3认同)