CSharpSyntaxWalker
에 nameof
표현을 사용하려고했지만, AST에 NameOfExpressionSyntax
이없는 것으로 나타났습니다. 대신 SemanticModel.GetSymbolInfo
이 일치하는 기호를 반환하지 않는 InvocationExpressionSyntax
이 표시되고 호출의 표현식은 식별자 토큰 "nameof"
을 포함하는 IdentifierNameSyntax
입니다. Roslyn에서 이름의 구문 분석하기
nameof
인지를 찾고,
GetSymbolInfo
아무것도 반환 여부에 대해 그렇지 않은 경우보고,
VisitInvocationExpression
에 나는 특별한 경우를 추가 한 것
nameof
표현을 인식합니다. 그러나, 그것은 저에게 iffy 조금 소리가 난다. 그런 종류의 탐지 논리를 파서로 옮기는 더 좋은 방법이 있을까요?
(P.S : 나는이 아마 이전 버전과의 호환성을 위해 다음과 같은 구문 분석 알고 있습니다. 단지 nameof
정상 호출을 구별하기위한 API가 있는지 궁금)
[다른 사람도이 사실을 알고 있습니다.] (https://joshvarty.wordpress.com/2015/02/16/lrn-quick-tips-working-with-nameof/). – Rawling
여전히 C# 6에 대한 공식 사양이 없지만 [이 초안] (https://github.com/ljw1004/csharpspec/blob/f12213c4ffe77a51dbc5412250bef6af75333f32/expressions.md#nameof-expressions)은 모호한 구문 분석 및 추가 추론이 필요합니다. –
@Damien_The_Unbeliever : 실제로 Roslyn의 소스 코드에서 그 위치를 찾아내는 것을 시도했지만, 어디에서 그렇게했는지는 결정할 수 없었습니다. 어쩌면 다시 봐야 할 것 같아. – Joey