2015-12-15 68 views
7

?在以下C#代碼中指示了什麼?方法調用時的問號語法

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

我已閱讀,你可以使用一個?型前表明它是一個可空類型。這是做同樣的事情嗎?

+0

這是安全導航操作符,在C#6中是新的。在SO上必須有重複的地方。 – senshin

+2

不,這與聲明可爲空的類型不同。你看到的是C#6語法,稱爲'null條件運算符' – Jonesopolis

+1

這裏是[文檔](https://msdn.microsoft.com/en-us/library/dn986595.aspx) – juharr

回答

14

這是使用null conditional operator表明該代碼不會拋出NullReferenceException異常,如果handler爲null C#6碼:

Delegate handler = null; 
handler?.Invoke(); 

這可以避免你在寫null檢查,你將不得不在以前的版本做的C#語言:

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

爲什麼迴應這個,當它是如此明確的重複? –

+5

@Lynn OP問:「在下面的c#代碼中指出了什麼?」這個問題的答案是「這是一個更深的空值檢查方法」嗎?這不是(海事組織)的好玩兒。恰好是對一個老問題的一個可能的答案。 –

+1

@GrantWinney我會爭辯說,當有人從Google來到這個問題時,他們會看到指向另一個問題的路標。然後,他們會讀到以前沒有簡明的方式來做空條件檢查,但現在有...並且他們將會有一個「啊哈!」各種各樣的時刻。 –