【发布时间】:2014-08-21 19:49:22
【问题描述】:
考虑以下代码:
bool funcExecuted = false;
bool result = false;
Func<bool> returnFalse = () =>
{
funcExecuted = true;
return false;
};
result &= returnFalse();
string msg = funcExecuted?"Executed":"Not Executed";
Console.WriteLine(msg);
预期结果:
- 期待收到
Not Executed的消息
实际结果:
- 我收到了
Executed消息。
结论:
result &= returnFalse(); 编译为result = result & returnFalse(); 而不是result = result && returnFalse();(我希望是后者)。
我的问题是,为什么会这样?
我希望它会反过来。我们都使用&& 运算符比& 运算符更常用,我希望它是“默认行为”。
更新:
大多数答案似乎都回答了错误的问题。
我知道&& 和& 之间的区别在于&& 是短路的,而& 总是计算两个操作数。
问题是为什么a &= b 翻译成a = a & b; 而不是a = a && b;
【问题讨论】:
-
在这种情况下大概会被称为 &&=。
-
@MarkPattison 也想过,正在谷歌上搜索该运算符是否存在,我只是不知道。
-
这是你的看法。正如我们所知,x+=y 意味着 = x+y,我个人习惯于这种看法。因此对于 x &= y 我会期望 x = x & y
-
为什么你会期望只使用一个
&的复合赋值运算符等同于使用&&而不是&?这对我来说似乎是一个奇怪的期望。
标签: c#