And*_*dry 5 .net c# syntax roslyn
我正在使用Roslyn来分析 C# 代码。我需要做的一件事是分析类声明节点并获取以下信息:
我可以访问类声明节点(类型ClassDeclarationSyntax),从那里我可以访问BaseList:
ClassDeclarationSyntax node = ...; // The class declaration
BaseListSyntax baseList = node.BaseList;
Run Code Online (Sandbox Code Playgroud)
但是同时baseList包含接口和类。我需要区分类和接口。如何?
SemanticModel吗?我搜索了Roslyn 的 Wiki,发现可以从我的 AST 访问语义信息。
SyntaxTree programRoot = ...; // Getting the AST root
CSharpCompilation compilation = CSharpCompilation.Create("Program")
.AddReferences(MetadataReference.CreateFromFile(
typeof(object).Assembly.Location))
.AddSyntaxTrees(programRoot);
Run Code Online (Sandbox Code Playgroud)
但是如何从这里获取这些信息呢?谢谢
是的。
语法树只知道哪些单词在哪里;它不知道标识符指的是什么。
您需要从编译中获取 SemanticModel),然后调用GetSymbolInfo()列表中的每个标识符节点。然后,您可以将符号转换为ITypeSymbol以了解类型。