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

Jam*_*man 2 c# delegates visual-studio-2015

Visual Studio中突出显示了以下代码片段以及简化它的建议.

if ( drawMethodsDelegate != null )
    drawMethodsDelegate ( e.Graphics );
Run Code Online (Sandbox Code Playgroud)

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

drawMethodsDelegate?.Invoke ( e.Graphics );
Run Code Online (Sandbox Code Playgroud)

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

Tutorial Point页面,MSDN Delegates页面,MSDN Control.Invoke页面

Chr*_*tos 11

这是空条件运算符.

drawMethodsDelegate?.Invoke ( e.Graphics );
Run Code Online (Sandbox Code Playgroud)

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

最后但并非最不重要的是,abive check也是线程安全的!

有关详细信息,请查看此处

  • @JamesYeoman 谢谢你!不幸的是,在我们的社区中,我们有这样的行为,不发表评论就投反对票。我认为你的问题不应该被否决。其实我在开始写这篇评论之前就已经点赞了。我希望有一天所有的反对票都应该附有理由。 (2认同)