&&= 在 C# 中?(布尔表达式)
本文关键字:amp 布尔表达式 | 更新日期: 2023-09-27 18:33:41
可能的重复项:
为什么没有||= 或 &&= 运算符?
纯属偶然,我今天发现
a &= GetBool();
与 不同
a = a && GetBool();
我一定误解了很多年。在第一个例子中,即使"a"为假,也会执行"GetBool()
"。在第二个中,它不是。
在 C# 中有什么可以实现"&&="之类的东西吗?
在 C# 中有什么可以实现"&&="之类的东西吗?
好吧,你可以写
a = a && getBool();
相反。。。老实说,我想不出很多情况下我真的想做任何不同的事情。即使以上情况也非常罕见,IME。
没有为&&
、||
或??
定义复合赋值运算符(这是明显的"短路"运算符)。有关复合赋值运算符的完整列表,请参阅 C# 4 规范的第 7.17 节,有关复合赋值的确切用途的更多详细信息,请参见第 7.17.2 节。
从文档中:
使用 &= 赋值运算符的表达式,例如
x &= y
相当于
x= x & y
除了 x 只评估一次。&运算符执行 整型操作数上的按位逻辑 AND 运算和逻辑 AND 上的运算 布尔操作数。
我想说的是,为了避免在不必要的情况下评估y,请使用
x = x && y
并避免两次评估 x(无论这意味着什么),请使用
x &= y
您不能将两者结合起来。
微观优化(至少对于理论案例),它将是:
if (x) x = y;
如果 x 已经false
,则无需执行任何操作。