0

C#の条件演算子が短絡を実行することは私の理解でした。ただし、このコードの実行中にプログラムが例外をスローします。インデックスは-1に等しいため、2番目の条件は実行されないはずですが、インデックスの範囲外の例外が発生します。

if (index != -1 || pieces[index].Type != PieceType.Rook)
{
    allowed = false;
}
4

5 に答える 5

2

使用しました|| したがって、最初の条件が失敗した場合(インデックスは-1)、ランタイムはコードを実行から除外する前に2番目の条件をチェックする必要があり、それによって例外がトリガーされます。

代わりに、2つの条件が真の場合にのみifを入力する場合は、&&(AND)を使用します。
このように、以前と同様に、ランタイムは最初の条件をチェックし、誤った結果を取得するだけで、2番目の条件をチェックする必要がないと判断できます。

if (index != -1 && pieces[index].Type != PieceType.Rook)
{
    allowed = false;
}
于 2013-03-23T15:18:44.447 に答える
1

に置き換え||ます&&

if (index != -1 && pieces[index].Type != PieceType.Rook)

それ以外の場合、最初の条件がfalseの場合、2番目の条件が評価されます。両方の条件true、特に最初の条件が必要です。

于 2013-03-23T15:17:49.160 に答える
0

これは、OR演算子を使用しているためです。最初の条件はfalseであるため、2番目の条件は評価を開始します。

于 2013-03-23T15:17:24.400 に答える
0

あなたが持っている必要がありindex != 1 && ...ます。

また、index < -1または>= pieces.Length

于 2013-03-23T15:17:46.553 に答える
0

||何かが真実であることが判明すると、評価を停止します。falseなのでindex != -1、式の両側を評価します。もしあなたが&&それが偽を見つけたらそれは止まるでしょう。怠惰な排泄について読むことをお勧めします。

于 2013-03-23T15:28:50.633 に答える