5

私が理解して読んだように、if ステートメント (&& または ||) で短絡を使用して、2 番目の条件が発生しないようにすることができます。両方の条件を実行する場合は、単一のオペランド (& または |) を使用します。

したがって、以下のようにインライン if ステートメントがあるとします。

var test = (MyObject != null || string.IsNullOrEmpty(MyObject.Property)) ? string.Empty : MyObject.Property;

MyObject が null の場合、これはエラーをスローobject referenceしますが、短絡を使用しているため、私の意見ではそうすべきではありません。誰かがこれを説明してもらえますか。

4

6 に答える 6

13

間違った条件を使用しています。この部分:

MyObject != null || string.IsNullOrEmpty(MyObject.Property)

次のようにする必要があります。

MyObject == null || string.IsNullOrEmpty(MyObject.Property)

an の RHS は、||左手がfalseの場合にのみ実行されます。nullでない場合にのみ実行する必要MyObjectがあります。

編集:本当にそのMyObject != null部分が必要な場合は、全体を次のように変更できます。

var test = MyObject != null && !string.IsNullOrEmpty(MyObject.Property)
       ? MyObject.Property : "";

ただし、条件演算子の 2 番目と 3 番目のオペランドが逆になっていることにも注意してください。

于 2013-03-01T11:58:56.623 に答える
3

!= ではなく == を使用する必要があります

var test = (MyObject == null || string.IsNullOrEmpty(MyObject.Property) ? string.Empty : MyObject.Property
于 2013-03-01T11:59:47.920 に答える
2

これを試して:

var test = (MyObject == null || string.IsNullOrEmpty(MyObject.Property)
             ? string.Empty : MyObject.Property
于 2013-03-01T11:59:54.230 に答える
2
MyObject != null || string.IsNullOrEmpty(MyObject.Property) 

ここであなたは言います。

私のオブジェクトがnullでない場合。または string.IsNullOrEmpty(MyObject.Property)

つまり、MyObject が null の場合、彼は 2 番目の部分を実行しようとします。

MyObject == null || string.IsNullOrEmpty(MyObject.Property)

これはnull例外をスローしません

于 2013-03-01T12:00:08.430 に答える
2

これMyObjectは isnullであるため、最初の条件が is であるfalseため、条件全体を知るために 2 番目の部分を評価する必要があります。行を次のように変更します。

MyObject != null && string.IsNullOrEmpty(MyObject.Property)
于 2013-03-01T12:00:10.673 に答える
1

行数ではなく読みやすさを優先する必要があります。たとえば、次のようになります。

string prop = string.Empty;
if(MyObject != null && MyObject.Property != null)
    prop = MyObject.Property;

(例外の理由は他の回答ですでに説明されています)

于 2013-03-01T12:08:17.110 に答える