C#の条件演算子が短絡を実行することは私の理解でした。ただし、このコードの実行中にプログラムが例外をスローします。インデックスは-1に等しいため、2番目の条件は実行されないはずですが、インデックスの範囲外の例外が発生します。
if (index != -1 || pieces[index].Type != PieceType.Rook)
{
allowed = false;
}
C#の条件演算子が短絡を実行することは私の理解でした。ただし、このコードの実行中にプログラムが例外をスローします。インデックスは-1に等しいため、2番目の条件は実行されないはずですが、インデックスの範囲外の例外が発生します。
if (index != -1 || pieces[index].Type != PieceType.Rook)
{
allowed = false;
}
使用しました|| したがって、最初の条件が失敗した場合(インデックスは-1)、ランタイムはコードを実行から除外する前に2番目の条件をチェックする必要があり、それによって例外がトリガーされます。
代わりに、2つの条件が真の場合にのみifを入力する場合は、&&(AND)を使用します。
このように、以前と同様に、ランタイムは最初の条件をチェックし、誤った結果を取得するだけで、2番目の条件をチェックする必要がないと判断できます。
if (index != -1 && pieces[index].Type != PieceType.Rook)
{
allowed = false;
}
に置き換え||
ます&&
if (index != -1 && pieces[index].Type != PieceType.Rook)
それ以外の場合、最初の条件がfalseの場合、2番目の条件が評価されます。両方の条件true
、特に最初の条件が必要です。
これは、OR演算子を使用しているためです。最初の条件はfalseであるため、2番目の条件は評価を開始します。
あなたが持っている必要がありindex != 1 && ...
ます。
また、index
< -1
または>= pieces.Length
?
||
何かが真実であることが判明すると、評価を停止します。falseなのでindex != -1
、式の両側を評価します。もしあなたが&&
それが偽を見つけたらそれは止まるでしょう。怠惰な排泄について読むことをお勧めします。