可能重复:
为什么没有 ||= 或 &&= 运算符?
纯属偶然,我今天发现
a &= GetBool();
不一样
a = a && GetBool();
我一定误解了很多年。在第一个示例中,GetBool()
即使“a”为假,也会执行“”。在第二个,它不是。
有什么可以在 C# 中实现类似“&&=”的东西吗?
可能重复:
为什么没有 ||= 或 &&= 运算符?
纯属偶然,我今天发现
a &= GetBool();
不一样
a = a && GetBool();
我一定误解了很多年。在第一个示例中,GetBool()
即使“a”为假,也会执行“”。在第二个,它不是。
有什么可以在 C# 中实现类似“&&=”的东西吗?
有什么可以在 C# 中实现类似“&&=”的东西吗?
嗯,你可以写
a = a && getBool();
相反......老实说,我想不出很多我真的想做不同的事情。即使是上述内容也很少见,IME。
没有为&&
, ||
or定义复合赋值运算符??
(这是明显的“短路”运算符)。有关复合赋值运算符的完整列表,请参见 C# 4 规范的第 7.17 节,有关复合赋值的详细信息,请参见第 7.17.2节。
从文档中:
使用 &= 赋值运算符的表达式,例如
x &= y
相当于
x = x & y
除了 x 只被评估一次。& 运算符对整数操作数执行按位逻辑与运算,对布尔操作数执行逻辑与运算。
我会说,为了避免在不必要时评估 y,请使用
x = x && y
并避免对 x 进行两次评估(无论这意味着什么),请使用
x &= y
你不能把两者结合起来。
微优化(至少对于理论上的情况),它将是:
if (x) x = y;
如果 x 已经是 ,则无需执行任何操作false
。