纯粹的意外,我今天发现了
a &= GetBool();
与
不同 a = a && GetBool();
我多年来一定误解了这一点。在第一个例子中,即使“a”为假,也执行“GetBool()
”。在第二个,它不是。
在C#中有什么可以实现“&& =”这样的东西吗?
答案 0 :(得分:6)
在C#中有什么可以实现“&& =”这样的东西吗?
好吧,你可以写
a = a && getBool();
相反......说实话,我想不出很多我实际上想要做任何不同事情的情况。即使是上述情况也非常罕见,IME。
没有为&&
,||
或??
定义复合赋值运算符(这是明显的“短路”运算符)。有关复合赋值运算符的完整列表,请参阅C#4规范的第7.17节;有关完全复合赋值的详细信息,请参见第7.17.2节。
答案 1 :(得分:4)
使用& =赋值运算符的表达式,例如
x& = y
相当于
x = x& ÿ
除了x只评估一次。 &操作员执行 对积分操作数和逻辑AND的按位逻辑AND运算 布尔操场。
我想说,为了避免在没有必要时对y进行评估,请使用
x = x && y
并避免两次评估x(无论这意味着什么),请使用
x &= y
你不能将两者结合起来。
微优化(至少在理论情况下),它将是:
if (x) x = y;
如果x已经是false
,则无需执行任何操作。