C# 6.0 疑問符ドット演算子の秘密
C# 6.0 で導入された ?. 演算子は、開発者の間で関心を集めています。その謎を明らかにしましょう:
機能:
?. 演算子は「空の条件演算子」と呼ばれます。これにより、煩わしい NullReferenceException 例外を発生させることなく、安全にプロパティにアクセスしたり、null の可能性があるオブジェクトのメソッドを呼び出すことができます。
仕組み:
? 演算子は最初のオペランドを評価します。 null の場合、式は停止し、null を返します。ただし、最初のオペランドが null でない場合は、最初のオペランドのメンバーとしてアクセスされる 2 番目のオペランドの評価に進みます。
例:
次のコード スニペットを考えてみましょう:
<code class="language-c#">public class A { public string PropertyOfA { get; set; } } ... var a = new A(); var foo = "bar"; if(a?.PropertyOfA != foo) { //somecode }</code>
ここで、a が null の場合、a?.PropertyOfA は例外をスローする代わりに正常に null を返します。これにより、文字列の == 演算子を使用して foo と比較し、問題なく if ステートメントの実行を続行できるようになります。
同等のコード:
?. 演算子は、次のコードの短縮版と考えることができます:
<code class="language-c#">string bar = (a == null ? null : a.PropertyOfA); if (bar != foo) { ... }</code>
メモを入力します:
?. 演算子も式のタイプを変更できることに注意してください。たとえば、FileInfo.Length は、long 型のプロパティです。ただし、? を使用すると、long? 型の式になります:
<code class="language-c#">FileInfo fi = ...; // fi 可能为 null long? length = fi?.Length; // 如果 fi 为 null,length 将为 null</code>
以上がC#6.0のNull-Conditional Operator(?。)の背後にある謎は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。