gpt4 book ai didi

c# - 在 C# 中对 boolean 值使用 &=

转载 作者:行者123 更新时间:2023-11-30 13:18:49 25 4
gpt4 key购买 nike

我在 C# 中有一个名为 SendEvent 的方法,它返回一个 bool 表示它是否成功。我想遍历多个对象并在所有对象上调用 SendEvent,最后,有一个 bool 的结果变量,即 true 如果所有 SendEvent 调用都成功,如果至少有一个失败则为 false

起初我是这样做的:

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();
}

&= 如何处理 boolean 值?它会执行运算符的两边吗?结果变量中的结果是什么?

最佳答案

如您所见here , &&& 都为 bool 定义为“逻辑与” , 但 &&短路: 如果第一个操作数是 false 右边的表达式将不会进行评估。无论右侧表达式的结果如何,&& 表达式的结果将保持为 false。这通常首先是一个“性能黑客”,但如果正确的表达式有副作用,可能会引发异常等,这是您必须考虑的事情。如果第一个操作数为 true,则 || 运算符也会发生同样的情况。

所以如果你想先评估双方,你确实可以使用:

result = result & myObjects[i].SendEvent();

或更短:

result &= myObjects[i].SendEvent();

背景

language specifications 中所写:

The operation

x && y  

corresponds to the operation

x & y  

except that if x is false, y is not evaluated, because the result of the AND operation is false no matter what the value of y is. This is known as "short-circuit" evaluation.

请注意,没有 &&= 运算符(至少在我写这篇文章的时候是这样)。这看起来合理,因为通常使用 ..= 运算符,您会期望首先计算操作数,然后对左侧的变量进行一些操作。当然这完全是风格和品味的问题,但我认为假设的 &&= 没有给出“足够的提示”正确的操作数不会被调用在所有情况下。

关于c# - 在 C# 中对 boolean 值使用 &=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42953932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com