2015-04-18 15 views
13

Dal progetto Roslyn, file di src\Compilers\CSharp\Portable\Syntax\CSharpSyntaxTree.cs alla linea 446 si trova:Che cosa significa?. significa in C#?

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

Qual è il ?. lì?

Verifica se oldTree è null e se non lo è, esegue il metodo GetRoot e, in caso contrario, restituisce? Questa è la mia prima ipotesi (che potrebbe essere sbagliata), ma non posso andare avanti con questo. (Confermarla e/o rispondere alla nuova domanda)

Ho cercato su google What is ?. C# e nulla legati venuta, è come se fosse ignorato la mia ?.

+0

È [l'operatore di propagazione nulla] (https://roslyn.codeplex.com/discussions/540883), e sì è un po 'difficile da google per un operatore composto solo da caratteri di punteggiatura. –

risposta

22

Potrebbe essere Null-Conditional Operator da C# 6.0 (?):

L'operatore null-condizionale verifica in modo condizionale null prima di richiamare il metodo di destinazione e qualsiasi altro metodo all'interno della catena di chiamate.

Nel tuo caso, se oldTree è null,

oldTree?.GetRoot() 

tornerà null invece di cercare di chiamare GetRoot() e gettando NullReferenceException.