6

.NETのAND演算子&&は、条件付きで2番目の引数を評価することを読みました。

nullをチェックしてから、単一のステートメント内のいくつかのフィールドをチェックするのは安全ですか?

たとえば、整数フィールドIdを持つクラスSomeClassがあるとします。

class SomeClass
{
   public Int32 Id { get; set; }
}

次に、このタイプのオブジェクトをどこかで受け取り、それに対していくつかのアクションを実行しようとします。

public void SomeMethod(SomeClass obj)
{
   if (obj != null)
      if (obj.Id == 1)
      {
         // do some actions
      }
}

コードの量を減らすために、これを次のように書き直すことはできますか?ヌルチェックは安全ですか?

public void SomeMethod(SomeClass obj)
{
   if (obj != null && obj.Id == 1)
      // do some actions
}
4

5 に答える 5

7

はい、安全です。&&条件は「左から右」に処理されます。最初の条件が一致しない場合、2番目の条件は評価されません。

msdn

操作

x && y

操作に対応します

x&y

ただし、xがfalseの場合、yの値に関係なく、AND演算の結果がfalseであるため、yは評価されません。これは「短絡」評価として知られています。

于 2012-10-12T09:27:35.247 に答える
3

はい、それは絶対に安全です。

質問で述べているように、オブジェクトがnullの場合、最初の条件のみが評価されるため、2番目の条件(NullReferenceExceptionが発生します)は実行されません。これは「短絡」評価としても知られています。

于 2012-10-12T09:27:30.687 に答える
1

はい...これはC#や他の多くの言語で安全です。次のチェックでifステートメント全体を実行できないことがプログラムでわかっている場合は、それらを調べる必要はありません。

このタイプの評価は、遅延評価と呼ばれます。

于 2012-10-12T09:29:55.850 に答える
1

ここでの用語は「短絡」です。and(&&)演算子を使用すると、最初の条件が失敗した場合、次の条件に進みません。あなたがしている彼らのやり方は、それが正しいやり方であるということを保存するだけではありません。

7.11条件付き論理演算子-C#リファレンスMSDN

&&と|| 演算子は条件付き論理演算子と呼ばれます。これらは「短絡」論理演算子とも呼ばれます。

于 2012-10-12T09:29:56.643 に答える
1

はい、それは単純なロジックです。いくつかのANDステートメントのうち1つが偽の場合、結果がFALSEになるため、それらを評価し続ける必要はありません。したがって、コンパイラは最初のFALSEが見つかったときに評価を停止します。

于 2012-10-12T09:30:34.390 に答える