私はそれを知って||
おり&&
、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のままになる場合にも当てはまります。
それで、&=
ショートカット|=
を実行しますか、IsEven
それともすべての反復で呼び出されることが保証されていますか?この場合の言語仕様に定義された動作はありますか?そのような短絡が問題となるコーナーケースはありますか?