Roslyn - 访问MethodSymbol中所有使用的类型

时间:2016-06-28 14:17:03

标签: c# .net compiler-construction roslyn

我目前在访问中有一个IMethodSymbol,现在我想在此方法中获取所有使用的类型。这意味着

  • 声明的本地变量的ITypeSymbol
  • 方法的ITypeSymbol在给定的Methodsymbol中调用,它们正在撤销Type(而不是System.Void)。
  • 此方法中任何方法调用中所有参数的ITypeSymbol。

问题是,如果roslyn支持这个优雅的API,或者我必须遍历syntaxtree并自己搜索信息?

1 个答案:

答案 0 :(得分:1)

使用CSharpSyntaxWalker访问方法体,从变量声明和调用表达式中收集符号,这很容易实现。虽然不是单行,但它应该是一个相当短的类实现,有两个重载方法。

需要注意两点:首先需要从IMethodSymbol通过其DeclaringSyntaxReferences获取语法树,以便能够访问语法树。您可以通过首先从SemanticModel获取该语法树的Compilation并查询相应的符号来获取表达式中的各种符号。