我知道||
并且&&
在 C# 中被定义为短路运算符,并且这种行为是由语言规范保证的,但是|=
和&=
短路也一样吗?
例如:
private bool IsEven(int n)
{
return n % 2 == 0;
}
private void Main()
{
var numbers = new int[] { 2, 4, 6, 8, 9, 10, 14, 16, 17, 18, 20 };
bool allEven = true;
bool anyOdd = false;
for (int i = 0; i < numbers.Length; i++)
{
allEven &= IsEven(numbers[i]);
anyOdd |= !IsEven(numbers[i]);
}
}
当第 9 个条目被命中时,allEven
变为 false,这意味着所有后续条目都是不相关的 -allEven
对于将来对该表达式的所有调用,该值保证为 false。也是如此anyOdd
,当它看到 9 时设置为 true,并且对于该表达式的所有后续调用都将保持为 true。
那么,do&=
和|=
shortcut,还是IsEven
保证在每次迭代时都被调用?在这种情况下,语言规范中是否有任何定义的行为?是否存在这种短路会产生问题的极端情况?