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

时间:2012-05-09 09:28:12

标签: c# boolean-operations

  

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

纯粹的意外,我今天发现了

 a &= GetBool();

不同
 a = a && GetBool();

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

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

2 个答案:

答案 0 :(得分:6)

  

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

好吧,你可以写

a = a && getBool();
相反......说实话,我想不出很多我实际上想要做任何不同事情的情况。即使是上述情况也非常罕见,IME。

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

答案 1 :(得分:4)

来自documentation

  

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

     

x& = y

     

相当于

     

x = x& ÿ

     

除了x只评估一次。 &操作员执行   对积分操作数和逻辑AND的按位逻辑AND运算   布尔操场。

我想说,为了避免在没有必要时对y进行评估,请使用

x = x && y

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

x &= y

你不能将两者结合起来。

微优化(至少在理论情况下),它将是:

if (x) x = y;

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