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

&&;=在C#中?(布尔表达式),c#,boolean-operations,C#,Boolean Operations,可能重复: 纯属偶然,我今天发现 a &= GetBool(); 不一样 a = a && GetBool(); 我一定是多年来误解了这一点。在第一个示例中,即使“a”为false,也会执行“GetBool()”。在第二种情况下,情况并非如此 在C#?中,有什么东西可以实现像“&&&=”这样的功能吗 使用&=赋值运算符的表达式,例如 x&=y 相当于 x=x&y 除了x只计算一次。操作员执行以下操作(&O): 整数操作数上的位逻辑“与”运算和逻辑“与”运算 布尔

可能重复:

纯属偶然,我今天发现

 a &= GetBool();
不一样

 a = a && GetBool();
我一定是多年来误解了这一点。在第一个示例中,即使“a”为false,也会执行“
GetBool()
”。在第二种情况下,情况并非如此

在C#?

中,有什么东西可以实现像“&&&=”这样的功能吗

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

x&=y

相当于

x=x&y

除了x只计算一次。操作员执行以下操作(&O): 整数操作数上的位逻辑“与”运算和逻辑“与”运算 布尔操作数

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

x = x && y
为了避免计算x两次(无论这意味着什么),使用

你不能两者兼而有之

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

if (x) x = y;
如果x已经是
false
,则无需执行任何操作

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

嗯,你可以写

a = a && getBool();
相反。。。老实说,我想不出有多少情况下我真的想做什么不同的事情。即使是上述情况也非常罕见,伊梅


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

@Soohjun:这应该是
false
而不是
true
。我相信Eric在博客中谈到了为什么
&&&
不可用……啊,看这里。@HenkHolterman:当类型为bit/boolean时,按位和boolean完全相同。@HenkHolterman:我觉得我自己很困惑,我自己的评论。删除:)“评估一次”用于更复杂的情况,例如,如果您有
x[i+3]=x[i+3]&yi+3
计算了两次@Lister先生:这是有道理的,我没有考虑这个问题。还有一些属性,您可以在其中使用&=运算符,它可能具有任意复杂的实现(如果这是一个好的设计的话)。
a = a && getBool();