在C#中,"?"是什么意思?

15

在项目Roslyn中,文件 src\Compilers\CSharp\Portable\Syntax\CSharpSyntaxTree.cs 的第 446 行有以下代码:

using (var parser = new InternalSyntax.LanguageParser(lexer, oldTree?.GetRoot(), changes))
?.是C#语言中的空值传递运算符。它会检查oldTree是否为null,如果不是,则调用GetRoot方法;否则返回null。

1
这是空值传播运算符,是的,它有点棘手,因为只由标点字符组成的运算符很难在谷歌上搜索到。 - Lucas Trzesniewski
1个回答

25

这可能是来自C# 6.0的Null-Conditional Operator

空值条件运算符在调用目标方法及其调用链中的任何其他方法之前有条件地检查null。

在您的情况下,如果oldTreenull

oldTree?.GetRoot()

将返回null而不是尝试调用GetRoot()并抛出NullReferenceException


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接