以下代码片段在Visual Studio中突出显示,并提供了简化它的建议。
if ( drawMethodsDelegate != null )
drawMethodsDelegate ( e.Graphics );
当我点击灯泡建议时,Visual Studio将其重构为以下
drawMethodsDelegate?.Invoke ( e.Graphics );
不。问号不是拼写错误。我不明白问号用于什么,我在MSDN上找不到任何相关的东西。我还查看了Tutorial Point Delegates页面,但没有找到有用的信息。
Tutorial Point page,MSDN Delegates page,MSDN Control.Invoke page
答案 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调用方法,否则什么都不做。