43

以下の 2 つの if ステートメントには、論理演算子を使用した複数の条件があります。論理的にはどちらも同じですが、チェックの順序が異なります。最初のものは機能し、2 番目のものは失敗します。

条件の実行順序が定義されているかどうかを確認するためにMSDNを参照しました。しかし、私は見つけることができませんでした。

&&論理演算子として持つ複数のチェック条件を考えてみましょう。常に最初の条件をチェックし、それが満たされない場合は 2 番目の条件がチェックされないことが保証されていますか?

以前はアプローチ1を使用していましたが、うまく機能します。使用を実証する MSDN リファレンスを探しています。

アップデート

「短絡」評価参照

コード

  List<string> employees = null;  

  if (employees != null && employees.Count > 0)
  {
        string theEmployee = employees[0];
  }

  if (employees.Count > 0 && employees != null)
  {
        string theEmployee = employees[0];
  }
4

8 に答える 8

8

条件は左から右にチェックされます。左の&&条件が真の場合、演算子は右の条件のみを評価します。

C# 言語仕様のセクション 5.3.3.24 には、次のように記載されています。

5.3.3.24 &&式

形式の式exprexpr-first && expr-secondの場合:

· v の前expr-firstの明確な代入状態は、expr の前の v の明確な代入状態と同じです。

· 前の v の確定代入状態は、expr-second後の v の状態がexpr-first確定代入または「真の式の後に確定代入」のいずれかである場合に、確定代入されます。そうしないと、確実に割り当てられません。

· expr の後の v の明確な代入状態は、次のように決定されます。

o 後の v の状態expr-firstが確実に割り当てられる場合、expr の後の v の状態は確実に割り当てられます。

o それ以外の場合、v の後の状態expr-secondが確実に割り当てられ、v の後の状態expr-firstが「false 式の後に確実に割り当てられる」場合、expr の後の v の状態は確実に割り当てられます。

o それ以外の場合、後の v の状態expr-secondが確実に割り当てられるか、「真の式の後に確実に割り当てられる」場合、expr の後の v の状態は「真の式の後に確実に割り当てられる」。

o それ以外の場合、後の v の状態expr-firstが「偽の式の後に確実に割り当てられている」場合、および v の後の状態がexpr-second「偽の式の後に確実に割り当てられている」場合、expr の後の v の状態は「偽の式の後に確実に割り当てられている」。

o それ以外の場合、expr の後の v の状態は明確に割り当てられません。

したがって、これにより、 expr-firstが常に評価され、true の場合、expr-secondも評価されることが明確になります。

于 2013-05-23T10:08:30.730 に答える
4

表現はまだ疑わしいですが、左から右へ。

于 2013-05-23T10:20:08.677 に答える
2

条件付き AND 演算子 (&&) は、bool オペランドの論理 AND を実行しますが、必要に応じて 2 番目のオペランドのみを評価します。

于 2013-05-23T10:07:52.067 に答える
0

常に最初の条件をチェックし、それが満たされない場合は 2 番目の条件がチェックされないことが保証されていますか?

簡単な答えはイエスです。

于 2013-05-23T10:38:42.747 に答える
0

たとえば、短絡評価について説明している&&については、この MSDN ページを参照してください。

次のように実行シーケンスを確認または証明できます。

int i;
bool b;
b=((i=3)==0 && (i=4)!=0);
Console.WriteLine(i);
b=((i=3)!=0 || (i=4)!=0);
Console.WriteLine(i);

両方のケースで 3 が得られます。これは、どちらのケースでも短絡動作が発生することを示しています。一方、論理演算子「&」または「|」をそれぞれ使用して、それを防ぐことができます。両方の条件が評価されているため、結果は 4 になります。

于 2013-05-23T10:49:38.903 に答える