2015-04-18 5 views
13

Из проекта Roslyn, файл src\Compilers\CSharp\Portable\Syntax\CSharpSyntaxTree.cs в строке 446 есть:Что такое?. означает в C#?

using (var parser = new InternalSyntax.LanguageParser(lexer, oldTree?.GetRoot(), changes)) 

Что такое ?. там?

Проверяет ли он что-то oldTree null, и если это не так, то он запускает метод GetRoot, а если нет, то что он возвращает? Это мое первое предположение (что может быть неправильно), но я не могу с этим справиться. (Подтвердите его, и/или ответить на новый вопрос)

Я гугл What is ?. C# и не вышло ничего, связанное вверх, это как если бы он проигнорировал мой ?.

+0

Это [оператор, несущий нуль] (https://roslyn.codeplex.com/discussions/540883), и да, это довольно сложно для Google для оператора, состоящего только из знаков пунктуации. –

ответ

22

Это может быть Null-Conditional Operator из C# 6.0 (?):

Оператор с нулевым условием условно проверяет значение null перед вызовом целевого метода и любого дополнительного метода в цепочке вызовов.

В вашем случае, если oldTree является null,

oldTree?.GetRoot() 

вернется null вместо того, чтобы пытаться вызвать GetRoot() и бросали NullReferenceException.

Смежные вопросы