方法调用上的问号语法

mar*_*rsh 24 c#

什么是?下面的C#代码说明什么?

var handler = CallBack;
handler?.Invoke();
Run Code Online (Sandbox Code Playgroud)

我已经读过你可以使用a ?之前的类型来表明它是一个可以为空的类型.这是做同样的事吗?

Dar*_*rov 32

这是C#6代码,使用null conditional operator指示NullReferenceException如果handler为null ,此代码不会抛出异常:

Delegate handler = null;
handler?.Invoke();
Run Code Online (Sandbox Code Playgroud)

这样可以避免编写在以前版本的C#语言中必须执行的空检查:

Delegate handler = null;
if (handler != null)
{
    handler.Invoke();
}
Run Code Online (Sandbox Code Playgroud)

  • @GrantWinney我认为当有人从谷歌那里得到这个问题时,他们会看到指向另一个问题的路标.然后,他们会读到以前没有简洁的方法来做空条件检查,但是现在有......而且他们会有一个"啊哈!" 各种各样的时刻. (2认同)