如何在Roslyn's ' BaseList '中区分类和接口
本文关键字:中区 分类 接口 BaseList Roslyn | 更新日期: 2023-09-27 18:16:02
我使用Roslyn来分析c#代码。我需要做的一件事是分析类声明节点并获取关于:
的信息- 其基类
- 其实现接口
我可以访问类声明节点(类型ClassDeclarationSyntax
),从那里我可以访问BaseList
:
ClassDeclarationSyntax node = ...; // The class declaration
BaseListSyntax baseList = node.BaseList;
而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);
但是如何从这里获得这些信息呢?由于
可以。
语法树只知道什么单词在哪里;它不知道标识符指的是什么
您需要从编译中获得SemanticModel,然后在列表中的每个标识符节点上调用GetSymbolInfo()
。然后,您可以将符号转换为ITypeSymbol
,以了解该类型。