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

本文关键字:amp 布尔表达式 | 更新日期: 2023-09-27 18:33:41

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

纯属偶然,我今天发现

 a &= GetBool();

与 不同

 a = a && GetBool();

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

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

&&= 在 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,则无需执行任何操作。