10

可能重复:
为什么没有 ||= 或 &&= 运算符?

纯属偶然,我今天发现

 a &= GetBool();

不一样

 a = a && GetBool();

我一定误解了很多年。在第一个示例中,GetBool()即使“a”为假,也会执行“”。在第二个,它不是。

有什么可以在 C# 中实现类似“&&=”的东西吗?

4

2 回答 2

6

有什么可以在 C# 中实现类似“&&=”的东西吗?

嗯,你可以写

a = a && getBool();

相反......老实说,我想不出很多我真的想做不同的事情。即使是上述内容也很少见,IME。

没有为&&, ||or定义复合赋值运算符??(这是明显的“短路”运算符)。有关复合赋值运算符的完整列表,请参见 C# 4 规范的第 7.17 节,有关复合赋值的详细信息,请参见第 7.17.2

于 2012-05-09T09:39:06.350 回答
4

文档中:

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

x &= y

相当于

x = x & y

除了 x 只被评估一次。& 运算符对整数操作数执行按位逻辑与运算,对布尔操作数执行逻辑与运算。

我会说,为了避免在不必要时评估 y,请使用

x = x && y

并避免对 x 进行两次评估(无论这意味着什么),请使用

x &= y

你不能把两者结合起来。

微优化(至少对于理论上的情况),它将是:

if (x) x = y;

如果 x 已经是 ,则无需执行任何操作false

于 2012-05-09T09:37:29.033 回答