成员访问中的问号在C#中意味着什么?

Wic*_*koo 5 c# null operators

有人可以向我解释以下代码中成员访问中的问号是什么意思?

它是标准C#的一部分吗?尝试在Xamarin Studio中编译此文件时出现解析错误.

this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));
Run Code Online (Sandbox Code Playgroud)

AnalyzerFileReference.cs第195行

Ehs*_*jad 15

它是C#6中引入的Null Propagation运算符,只有当object 不为null 时才调用该方法:this.AnalyzerLoadFailed

this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));
Run Code Online (Sandbox Code Playgroud)

等于:

if( this.AnalyzerLoadFailed != null)
    this.AnalyzerLoadFailed.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));
Run Code Online (Sandbox Code Playgroud)

参见C#6.0 - Null Propagation Operator,你也可以在这里看到

我也曾在这里写过关于c#6即将推出的这个功能

  • 这是一个较旧的答案,但以上是不正确的.它等于上面代码的**threadsafe**版本,它涉及将事件处理程序分配给局部变量并对局部变量进行检查 (3认同)

And*_*yev 6

在C#版本6中,它将是简写

if (this.AnalyzerLoadFailed != null)
    this.AnalyzerLoadFailed.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));
Run Code Online (Sandbox Code Playgroud)