我知道,||
并&&
在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]);
}
}
Run Code Online (Sandbox Code Playgroud)
当9条目被命中时,allEven
变为false,这意味着所有后续条目都是无关紧要的 - allEven
对于将来对该表达式的所有调用,该值保证为false.同样如此anyOdd
,当它看到9时设置为true,并且对于该表达式的所有后续调用将保持为true.
那么,做&= …