C# 6.0 では疑問符とドット演算子 ?. は何を意味しますか? 質問する

C# 6.0 では疑問符とドット演算子 ?. は何を意味しますか? 質問する

?.VS2015 プレビューの C# 6.0 には、次のように使用できる新しい演算子 があります。

public class A {
   string PropertyOfA { get; set; }
}

...

var a = new A();
var foo = "bar";
if(a?.PropertyOfA != foo) {
   //somecode
}

それは具体的に何をするのでしょうか?

ベストアンサー1

それはヌル条件演算子。基本的には次のことを意味します。

「最初のオペランドを評価します。それが null の場合は停止し、結果は null になります。それ以外の場合は、2 番目のオペランドを評価します (最初のオペランドのメンバー アクセスとして)。」

aあなたの例では、がの場合null、例外をスローするのではなく にa?.PropertyOfA評価される点が重要です。次に、その参照を と比較し(文字列のオーバーロードを使用)、等しくないことがわかり、実行がステートメントの本体に進みます。nullnullfoo==if

つまり、次のようになります。

string bar = (a == null ? null : a.PropertyOfA);
if (bar != foo)
{
    ...
}

...ただし、a評価されるのは 1 回だけです。

これによって式の型も変わる可能性があることに注意してください。例えば、FileInfo.Lengthこれは 型のプロパティですlongが、これを null 条件演算子と一緒に使用すると、 型の式になりますlong?

FileInfo fi = ...; // fi could be null
long? length = fi?.Length; // If fi is null, length will be null

おすすめ記事