【发布时间】:2017-08-14 16:51:01
【问题描述】:
我在 C# 中有一个名为SendEvent 的方法,它返回一个bool,表示它是否成功。我想遍历许多对象并在它们上调用SendEvent,最后,如果所有SendEvent调用成功,则结果变量为bool,即true,以及@987654328 @如果至少有一个失败。
一开始我是这样做的:
bool result = true;
for (int i = 0; i < myObjects.Length; i++)
{
result = result && myObjects[i].SendEvent();
}
但这将导致如果一个失败,SendEvent 将不会在后续对象上被调用,因为如果结果是 false,则不会执行 && 运算符的右侧。
所以我转过身来:
bool result = true;
for (int i = 0; i < myObjects.Length; i++)
{
result = myObjects[i].SendEvent() && result;
}
但我发现这有点难看。我可以像这样使用按位&= 运算符始终执行SendEvent 调用,并设置结果的值吗?
bool result = true;
for (int i = 0; i < myObjects.Length; i++)
{
result &= myObjects[i].SendEvent();
}
&= 如何处理布尔值?它会执行操作员的双方吗?结果变量最终会是什么?
【问题讨论】:
-
不是
&=,是&&=。&=是逻辑与的运算符。 -
@dcg:不,OP希望调用该事件,并且
&也在bools上定义。 -
@WillemVanOnsem 所以
&=与&&=相同,带有布尔值? -
@dcg:
&&=does not exists. -
这是有道理的,因为这样一个假设的
&&=并不能保证它背后的代码甚至会被执行。
标签: c# boolean operators short-circuiting