重複の可能性:
.NET で安全な && 短絡に依存していますか?
質問のタイトルを正しく表現する方法がわかりませんでしたが、1 行のコードで説明するのは非常に簡単です。
if (someObject == null || someObject.someProperty)
...
それをしてもいいですか?またはこれ:
if (someObject != null && someObject.someProperty)
...
重複の可能性:
.NET で安全な && 短絡に依存していますか?
質問のタイトルを正しく表現する方法がわかりませんでしたが、1 行のコードで説明するのは非常に簡単です。
if (someObject == null || someObject.someProperty)
...
それをしてもいいですか?またはこれ:
if (someObject != null && someObject.someProperty)
...
はい。
2 番目のオペランドは、最初のオペランドが の場合にのみ評価されfalse
ます。
ただし、明らかに、2 番目のオペランドもブール値でなければなりません。
同様に、&&
は、最初のオペランドが である場合にのみ、2 番目のオペランドを評価しtrue
ます。
これを短絡といいます。
はい、これは安全です。||
と&&
は短絡演算子です。MSDN ライブラリから:
条件付き OR 演算子 (||) は、bool オペランドの論理 OR を実行しますが、必要に応じて 2 番目のオペランドのみを評価します。
操作
x || y
運用に対応
x | y
ただし、x が true の場合、y は評価されません (y の値が何であれ、OR 演算の結果は true であるため)。これは「短絡」評価として知られています。
はい、通常は AND を使用して、if ステートメントで null チェックを使用するのが一般的です。
最初のステートメントが true の場合、ステートメントは短絡して終了するため、これは有効です。
これらは両方とも有効です:
if(something != null && something.Bool)
...
if(something != null || something.Bool)
...
はい、||
両方&&
とも短絡します。実際、次のようなコードを書いている人を時々見かけます。
x != null && x.f();
これは次と同等です:
if(x != null) x.f();
(おそらくほとんどの場合、良い考えではありません - 読みやすさには良くありません。)
はい、できますが、どちらが必要かは、求めているセマンティクスによって異なります。
最初のケースでは、オブジェクトがまったくない場合、またはプロパティが true を返す場合に条件が機能します。基本的に、インスタンスが存在しないということは、条件付きロジックを実行する必要があることを意味します。
2 番目のケースでは、インスタンスが存在しなくても条件は実行されません。この場合、両方のインスタンスが必要であり、プロパティが true と評価される必要があります。
今日、ユーザー設定をロードするときに、これとまったく同じことを扱いました。設定が「チェック」されているかどうかを判断する必要がありました。新しい設定を追加する可能性があるため (その設定の各ユーザーの行をデータベースに追加する必要はありません)、ユースケースに合った後者の条件を選択しました。