【问题标题】:&&= in C#? (boolean expression) [duplicate]&&= 在 C# 中? (布尔表达式)[重复]
【发布时间】:2012-05-17 19:18:04
【问题描述】:

可能重复:
Why are there no ||= or &&= operators?

今天偶然发现

 a &= GetBool();

不一样

 a = a && GetBool();

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

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

【问题讨论】:

标签: c# boolean-operations


【解决方案1】:

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

嗯,你可以写

a = a && getBool();

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

没有为&&||?? 定义复合赋值运算符(它们是明显的“短路”运算符)。有关复合赋值运算符的完整列表,请参阅 C# 4 规范的第 7.17 节,有关确切复合赋值作用的更多详细信息,请参阅第 7.17.2 节。

【讨论】:

    【解决方案2】:

    来自documentation

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

    x &= y

    等价于

    x = x & y

    除了 x 只计算一次。 & 运算符执行 整数操作数的按位逻辑与运算和逻辑与运算 布尔操作数。

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

    x = x && y
    

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

    x &= y
    

    你不能将两者结合起来。

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

    if (x) x = y;
    

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

    【讨论】:

    • “评估一次”用于更复杂的情况,例如如果您有x[i+3] = x[i+3] & y; 那么i+3 显然会计算两次!
    • @Mr Lister:这是有道理的,我没有考虑到这一点。还有一些属性,您可以在其中使用 &= 运算符,它可能具有任意复杂的实现(如果这是一个好的设计除外)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2017-12-26
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多