2014-10-01 84 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));