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# 类型推断(“var”)赋值空合并运算符