从项目Roslyn,文件src\Compilers\CSharp\Portable\Syntax\CSharpSyntaxTree.cs在线路446有:
using (var parser = new InternalSyntax.LanguageParser(lexer, oldTree?.GetRoot(), changes))
Run Code Online (Sandbox Code Playgroud)
是什么?.呢?
它检查oldTree是什么null,如果不是那么它正在运行GetRoot方法,如果没有那么它返回什么?这是我的第一个假设(可能是错误的),但我无法继续前进.(确认,和/或回答新问题)
我用Google搜索What is ?. C#,没有任何相关内容,就好像它忽略了我的?.(?)
Ale*_*exD 25
它可能是C#6.0中的Null-Conditional运算符:
在调用目标方法和调用链中的任何其他方法之前,空条件运算符有条件地检查null.
在你的情况下,如果oldTree是null,
oldTree?.GetRoot()
Run Code Online (Sandbox Code Playgroud)
将返回,null而不是试图打电话GetRoot()和投掷NullReferenceException.