0

重複の可能性:
.NET で安全な && 短絡に依存していますか?

質問のタイトルを正しく表現する方法がわかりませんでしたが、1 行のコードで説明するのは非常に簡単です。

if (someObject == null || someObject.someProperty)
    ...

それをしてもいいですか?またはこれ:

if (someObject != null && someObject.someProperty)
    ...
4

5 に答える 5

5

はい。

2 番目のオペランドは、最初のオペランドが の場合にのみ評価されfalseます。

ただし、明らかに、2 番目のオペランドもブール値でなければなりません。

同様に、&&は、最初のオペランドが である場合にのみ、2 番目のオペランドを評価しtrueます。

これを短絡といいます。

于 2013-01-13T21:56:04.147 に答える
4

はい、これは安全です。||&&短絡演算子です。MSDN ライブラリから:

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

操作

x || y

運用に対応

x | y

ただし、x が true の場合、y は評価されません (y の値が何であれ、OR 演算の結果は true であるため)。これは「短絡」評価として知られています。

于 2013-01-13T21:56:32.270 に答える
0

はい、通常は AND を使用して、if ステートメントで null チェックを使用するのが一般的です。

最初のステートメントが true の場合、ステートメントは短絡して終了するため、これは有効です。

これらは両方とも有効です:

if(something != null && something.Bool)
  ...

if(something != null || something.Bool)
  ...
于 2013-01-13T21:56:57.643 に答える
0

はい、||両方&&とも短絡します。実際、次のようなコードを書いている人を時々見かけます。

x != null && x.f();

これは次と同等です:

if(x != null) x.f();

(おそらくほとんどの場合、良い考えではありません - 読みやすさには良くありません。)

于 2013-01-13T21:58:43.450 に答える
0

はい、できますが、どちらが必要かは、求めているセマンティクスによって異なります。

最初のケースでは、オブジェクトがまったくない場合、またはプロパティが true を返す場合に条件が機能します。基本的に、インスタンスが存在しないということは、条件付きロジックを実行する必要があることを意味します。

2 番目のケースでは、インスタンスが存在しなくても条件は実行されません。この場合、両方のインスタンスが必要であり、プロパティが true と評価される必要があります。

今日、ユーザー設定をロードするときに、これとまったく同じことを扱いました。設定が「チェック」されているかどうかを判断する必要がありました。新しい設定を追加する可能性があるため (その設定の各ユーザーの行をデータベースに追加する必要はありません)、ユースケースに合った後者の条件を選択しました。

于 2013-01-13T21:59:23.317 に答える