“?”的目的是什么? in(someDelegateName)?. Invoke();?

时间:2017-03-05 11:45:07

标签: c# visual-studio-2015 delegates

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

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

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

drawMethodsDelegate?.Invoke ( e.Graphics );

不。问号不是拼写错误。我不明白问号用于什么,我在MSDN上找不到任何相关的东西。我还查看了Tutorial Point Delegates页面,但没有找到有用的信息。

Tutorial Point pageMSDN Delegates pageMSDN Control.Invoke page

2 个答案:

答案 0 :(得分:9)

这是 null条件运算符。

drawMethodsDelegate?.Invoke ( e.Graphics );

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

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

有关详细信息,请查看here

答案 1 :(得分:2)

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

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

这意味着如果drawMethodsDelegate不为null调用方法,否则什么都不做。