Próbuję coś zrobić z wyrażeniami nameof
w CSharpSyntaxWalker
, jednak zauważyłem, że nie ma NameOfExpressionSyntax
w AST. Zamiast tego otrzymuję InvocationExpressionSyntax
, dla którego SemanticModel.GetSymbolInfo
nie zwraca żadnych pasujących symboli, a wyrażenie wywołania to IdentifierNameSyntax
zawierające token identyfikatora "nameof"
.Parsowanie wyrażeń nameof w Roslyn
więc rozpoznać nameof
wyrażenia bym dodał do VisitInvocationExpression
szczególny przypadek, szukając czy GetSymbolInfo
zwraca niczego, a jeśli nie, szukając tego, czy identyfikator jest nameof
. Jednak dla mnie to brzmi trochę niepewnie. Czy istnieje lepszy sposób, który może przesunąć tego rodzaju logikę wykrywania do analizatora składni?
(P.S .: Wiem, że to jest prawdopodobnie analizowany tak ze względu na kompatybilność wstecz;. Po prostu zastanawiasz się, czy istnieje API dla odróżnienia nameof
i normalne inwokacje)
[Ktoś inny też to zauważył] (https://joshvarty.wordpress.com/2015/02/16/lrn-quick-tips-working-with-nameof/). – Rawling
Ciągle nie ma formalnej specyfikacji dla C# 6, ale [ten szkic] (https://github.com/ljw1004/csharpspec/blob/f12213c4ffe77a51dbc5412250bef6af75333f32/expressions.md#nameof-expressions) wydaje się potwierdzać, że jest to niejednoznaczna analiza, a więc dodatkowe uzasadnienie jest wymagane. –
@Damien_The_Unbeliever: Rzeczywiście próbowałem znaleźć to miejsce w kodzie źródłowym Roslyn, gdzie to określa, ale nie mógł w pobieżnym wyszukiwaniu. Może powinienem znów spojrzeć. – Joey