2014-10-01 48 views
4

有人可以請我解釋下列代碼中成員訪問中的問號是什麼意思?C#中成員訪問中的問號是什麼意思?

它是標準C#的一部分嗎?當試圖在Xamarin Studio中編譯這個文件時,我得到了解析錯誤。

this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null)); 

AnalyzerFileReference.cs線195

+3

這將是C#的一部分見http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated,「7。 Monadic null checking「 – 2014-10-01 13:29:22

回答

15

Null Propagation operatorÇ引入#6,它將調用該方法只有當對象this.AnalyzerLoadFailed不爲空:

this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null)); 

等於:

if(this.AnalyzerLoadFailed != null) 
    this.AnalyzerLoadFailed.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null)); 

C# 6.0 – Null Propagation Operator,還可以看到here

我也曾經在C#寫了這個即將到來的標誌6 here

+1

這是比較老的答案,但上面的說法不正確,它與上面代碼的** threadsafe **版本相同,它涉及將事件處理程序分配給本地變量並對局部變量 – Tseng 2015-03-16 15:42:21

6

在C#6版將是速記

if (this.AnalyzerLoadFailed != null) 
    this.AnalyzerLoadFailed.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null)); 
相關問題