c# 赋值运算符 &=

Posted

技术标签:

【中文标题】c# 赋值运算符 &=【英文标题】:c# Assignment operator &= 【发布时间】:2011-07-29 02:01:33 【问题描述】:

如果我有以下布尔:

bool success = true;

以下三行代码是否会成功存储相同的结果:

1 - success &= SomeFunctionReturningABool();

2 - success = success & SomeFunctionReturningABool();

3 - success = success && SomeFunctionReturningABool();

我发现一篇文章指出 1 是 2 的快捷方式 - 但 2 与 3 相同,或者我的应用程序会在执行此行时爆炸...

【问题讨论】:

【参考方案1】:

你是对的。 1 是 2 的捷径。 '&' 和 '&&' 的区别你可以在这里找到msdn

'&' 是逻辑与,而 '&&' 是条件与

【讨论】:

【参考方案2】:

1 和 2 同理,下面同理:

int value += 1;
int value = value + 1;

3 不一样,好像success 为假,SomeFunctionReturningABool() 不会 被调用 - 这不是你想要的。

【讨论】:

【参考方案3】:

对于布尔类型,单 & 计算所有操作数,而双 && 仅在必要时计算(即如果第一个操作数为假,则不会计算第二个操作数),也称为“短-电路”评估。

来源:http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.80).aspx

&= 赋值运算符与单个& 相同。

【讨论】:

非常感谢!那么这意味着如果成功为假,则第 3 行将不会执行该函数?【参考方案4】:

选项 2 和 3 是等效的,&= 正是这样做的。

您应该知道,如果第一次调用失败,则后续调用可能不会发生:例如,

if (x != null && x.Test() == true)

它首先评估x != null - 如果它是假的,那么第二部分将不会被执行。此处同样适用。

(嗯,我想知道这是否只是 && 而不是 &...)

【讨论】:

不,2 和 3 不等价。正如您所指出的,与双与号不同,单与号实际上会评估两个参数。见msdn.microsoft.com/en-us/library/2a723cdk(v=vs.80).aspx

以上是关于c# 赋值运算符 &=的主要内容,如果未能解决你的问题,请参考以下文章

为啥短原语有赋值运算符(&=、+=)但没有非赋值运算符(&、+)? [复制]

在 C# 中重载复合赋值运算符的简单方法?

来自'??' 的 C# 类型推断(“var”)赋值空合并运算符

《C#零基础入门之百识百例》位和赋值运算符 -- 2的n次幂

PHP赋值运算符=& [重复]

PHP 中的引用赋值运算符 =&