从项目Roslyn
,src\Compilers\CSharp\Portable\Syntax\CSharpSyntaxTree.cs
行446
处有:
using (var parser = new InternalSyntax.LanguageParser(lexer, oldTree?.GetRoot(), changes))
那里的?.
是什么?
是否检查oldTree是null
,如果不是那么它正在运行GetRoot
方法,如果没有,那么它返回什么?这是我的第一个假设(可能是错误的),但我无法继续前进。 (确认,和/或回答新问题)
我用Google搜索What is ?. C#
并且没有任何相关内容,就好像它忽略了我的?.
(?)
答案 0 :(得分:25)
C#6.0可能是Null-Conditional Operator:
在调用目标方法和调用链中的任何其他方法之前,空条件运算符会有条件地检查null。
在您的情况下,如果oldTree
为null
,
oldTree?.GetRoot()
将返回null
,而不是尝试致电GetRoot()
并投掷NullReferenceException
。