我正在使用Roslyn分析C#代码。我需要做的一件事情是分析类声明节点并获取有关以下信息:
我可以访问类声明节点(类型
ClassDeclarationSyntax
),然后从那里可以访问BaseList
:ClassDeclarationSyntax node = ...; // The class declaration
BaseListSyntax baseList = node.BaseList;
但是
baseList
包含接口(interface)和类。我需要从接口(interface)区分类。如何?我需要使用
SemanticModel
吗?我搜索了Roslyn's Wiki,发现可以从AST访问语义信息。
SyntaxTree programRoot = ...; // Getting the AST root
CSharpCompilation compilation = CSharpCompilation.Create("Program")
.AddReferences(MetadataReference.CreateFromFile(
typeof(object).Assembly.Location))
.AddSyntaxTrees(programRoot);
但是如何从这里获取那些信息呢?
谢谢
最佳答案
是的。
语法树只知道什么单词在哪里;它对标识符所指的一无所知。
您需要从编译中获取SemanticModel),然后在列表中的每个标识符节点上调用GetSymbolInfo()
。然后,您可以将符号转换为ITypeSymbol
来查找类型。