我正在使用Roslyn来分析C#代码。我需要做的一件事是分析一个类声明节点并获取有关的信息:
我可以访问类声明节点(类型ClassDeclarationSyntax
),然后我可以访问BaseList
:
ClassDeclarationSyntax node = ...; // The class declaration
BaseListSyntax baseList = node.BaseList;
但是baseList
包含接口和类。我需要区分类和接口。怎么样?
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);
但是如何从这里获取这些信息? 感谢
答案 0 :(得分:3)
是
语法树只知道哪些词在哪里;它对标识符所指的内容一无所知。
您需要从编译中获取SemanticModel,然后在列表中的每个标识符节点上调用GetSymbolInfo()
。然后,您可以将符号转换为ITypeSymbol
以查找类型。