关于c#:(someDelegateName)中“?”的目的是什么?。Invoke();?

What is the purpose of “?” in (someDelegateName)?.Invoke();?

本问题已经有最佳答案,请猛点这里访问。

下面的代码片段在Visual Studio中突出显示,并建议简化它。

1
2
if ( drawMethodsDelegate != null )
    drawMethodsDelegate ( e.Graphics );

当我单击灯泡建议时,Visual Studio将其重构为以下内容

1
drawMethodsDelegate?.Invoke ( e.Graphics );

不,问号不是打字错误。我不明白问号是用来做什么的,我也找不到任何与msdn相关的东西。我还查看了Tutorial Point Delegates页面,但没有找到有用的信息。

教程点页,msdn委托页,msdn控件.invoke页


这是空条件运算符。

1
drawMethodsDelegate?.Invoke ( e.Graphics );

如果drawMethodsDelegate不为空,则调用Invoke方法。它是在第6版C中引入的一个运算符,您可以将其视为一种语法糖分,它可以帮助您编写更少的代码来处理空检查。

最后但并非最不重要的是,上述检查也是线程安全的!

更多信息请看这里


这是C 6.0附带的空条件运算符

https://msdn.microsoft.com/en-us/library/dn986595.aspx

这意味着如果drawmethodsDelegate不是空的,则调用该方法,否则不执行任何操作。