2015-12-15 9 views
7

?は、次のC#コードで何を示していますか?質問メソッド呼び出しのマーク構文

var handler = CallBack; 
handler?.Invoke(); 

私はあなたがそれがNULL可能タイプであることを示すためにタイプする前に?を使用することができることを読みました。これは同じことをしていますか?

+0

これはC#6で新しく追加された安全ナビゲーション演算子です。SOのどこかに重複が存在する必要があります。 – senshin

+2

いいえ、nullable型の宣言と同じではありません。あなたが見ているのは、C#6の構文です。ヌル条件付き演算子です。 – Jonesopolis

+1

[documentation](https://msdn.microsoft.com/en-us/library/dn986595.aspx) – juharr

答えて

14

これはhandlerがnullの場合、このコードはNullReferenceException例外をスローしないであろうことを示すnull conditional operatorを使用してC#6のコードです:

あなたが以前のバージョンで実行する必要がありますヌルチェックを書き込まないよう
Delegate handler = null; 
handler?.Invoke(); 

Delegate handler = null; 
if (handler != null) 
{ 
    handler.Invoke(); 
} 
+1

なぜこれに応答する、それは非常に明らかにdupですか? –

+5

@Lynn OPは「次のC#コードではどういう意味ですか?」と尋ねました。その質問への答えは、 "それは深いヌルチェックを行うより良い方法です"ですか?それは良い欺瞞(IMO)ではありません。ただ、古い質問に対する1つの可能な答えに過ぎない。 –

+1

@GrantWinney私は、誰かがGoogleからこの質問に来るとき、彼らはもう一つの質問を指し示す道標を見るだろうと主張したいと思います。そして、以前はnull条件付きチェックを行うための簡潔な方法はなかったのですが、今はそこに...「ああ、ハ!一種の瞬間 –

関連する問題