在Roslyn Analyzer中获取元组类型

时间:2019-03-03 04:34:11

标签: roslyn roslyn-code-analysis

我正在编写Roslyn分析器,遇到了需要了解元组类型的需求。我已经检索到TypeInfo,在调试器中,我看到有一个挂在Type上的TupleElements,这正是我所需要的。但是,似乎只能通过强制转换为TupleTypeSymbol

来访问
((Microsoft.CodeAnalysis.CSharp.Symbols.TupleTypeSymbol)typeInfo.Type).TupleElements

由于其保护级别,TupleTypeSymbol无法访问,因此无法进行强制转换。还有其他访问信息的方式吗?

在我的类型是开放的泛型的情况下,我有很多相同的问题:是否可以通过某种方式访问​​泛型的类型信息?

1 个答案:

答案 0 :(得分:0)

  • 对于元组类型,您只需要将类型转换为INamedTypeSymbol并从中获取基础元组类型:(type as INamedTypeSymbol)?.TupleUnderlyingType,此后,您将获得通常的ITypeSymbol泛型类型,最后,只需接受泛型类型参数:(type as INamedTypeSymbol)?.TupleUnderlyingType.TypeArguments
  • 例如,如果您想获取有关开放通用类型参数的信息,例如T1中的T2Gen<T1,T2>,您实际上可以做同样的事情:将类型强制转换为{ {1}},并从中获取INamedTypeSymbol(如果类型为开放或封闭的通用类型)