Roslyn - 访问 MethodSymbol 中所有使用的类型
Roslyn - Access all used Types within a MethodSymbol
我目前有一个 IMethodSymbol 正在访问中,现在我想获取此方法中所有使用的类型。也就是说
- 声明的局部变量的 ITypeSymbol
- 给定 Methodsymbol 中的方法调用的 ITypeSymbol,正在返回一个类型(不是 System.Void)。
- 此方法内任何方法调用中所有参数的 ITypeSymbol。
问题是,如果 roslyn 支持这个非常优雅 API,或者我是否必须遍历语法树并自行搜索信息?
通过 CSharpSyntaxWalker
访问您从变量声明和调用表达式中收集符号的方法体,这很容易实现。虽然不是单行代码,但它应该是一个相当短的 class 实现,带有两个重载方法。
有两点需要注意:您首先需要通过 DeclaringSyntaxReferences
从 IMethodSymbol
获取语法树才能访问语法树。您可以通过首先从 Compilation
获取该语法树的 SemanticModel
并查询相应的符号来从表达式中获取各种符号。
我目前有一个 IMethodSymbol 正在访问中,现在我想获取此方法中所有使用的类型。也就是说
- 声明的局部变量的 ITypeSymbol
- 给定 Methodsymbol 中的方法调用的 ITypeSymbol,正在返回一个类型(不是 System.Void)。
- 此方法内任何方法调用中所有参数的 ITypeSymbol。
问题是,如果 roslyn 支持这个非常优雅 API,或者我是否必须遍历语法树并自行搜索信息?
通过 CSharpSyntaxWalker
访问您从变量声明和调用表达式中收集符号的方法体,这很容易实现。虽然不是单行代码,但它应该是一个相当短的 class 实现,带有两个重载方法。
有两点需要注意:您首先需要通过 DeclaringSyntaxReferences
从 IMethodSymbol
获取语法树才能访问语法树。您可以通过首先从 Compilation
获取该语法树的 SemanticModel
并查询相应的符号来从表达式中获取各种符号。