1

私には2つの条件がShouldCheckForErrorsあり、HasErrors

私のコードは

if(ShouldCheckForErrors && HasErrors)
{
    //Do nothing
}
else
{
    PassTest()
}

これは非常に長ったらしいチェックだと思います。を使用せずに単一のチェックを実行できる方法はありませんelseか?

例えば:

if(!ShouldCheckForErrors && !HasErrors)
{
    PassTest()
}

PassTest()is の場合ShouldCheckforErrorsは呼び出しに失敗するため、機能しませんtrueが、HasErrorsisfalseです。(およびその逆)

論理演算子で何かを忘れているように感じます。

4

4 に答える 4

8

あなたはド・モルガンの法則を探しています:

if (!ShouldCheckForErrors || !HasErrors)

別の言い方をすれば:

エラーがない場合、またはエラーをチェックしていない場合は、パスする必要があります。

于 2013-07-03T18:05:48.943 に答える
5

!両方の条件の結果を取得した後、not 演算子を使用します

if(!(ShouldCheckForErrors && HasErrors))
{
    PassTest();
}
于 2013-07-03T18:05:19.920 に答える
2

あなたの論理は少しずれています

!ShouldCheckForErrors && !HasErrors

と同じではありません

!(ShouldCheckForErrors && HasErrors)

それがあなたが望んでいると私が信じているものです

于 2013-07-03T18:05:35.030 に答える
1

より単純なケース -

if(theOnlyCheck) {

}
else {
    do();
}

あなたはこのチェックを短縮するのに十分精通しているようです-

if(!theOnlyCheck) {
    do();
}

しかし、操作の順序を台無しにするだけです。

に代入(check1 && check2)theOnlyCheckます。括弧を忘れないでください:

if(!(check1 && check2)) {
    do();
}

これらの括弧を扱いたくない場合は、ド・モルガンの法則に従うことができます: !(a && b)は と同じ!a || !bです。自分で考えてみてください -

if(!check1 || !check2) {
    do();
}
于 2013-07-03T18:16:04.413 に答える