?.
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
評価される点が重要です。次に、その参照を と比較し(文字列のオーバーロードを使用)、等しくないことがわかり、実行がステートメントの本体に進みます。null
null
foo
==
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