在 Roslyn 分析器中获取元组类型

Get Tuple Type in Roslyn Analyzer

我正在编写一个 Roslyn 分析器,发现需要知道元组的类型。我已经检索到 TypeInfo 并且在调试器中我可以看到有一个 TupleElements 挂在 Type 上,这正是我需要的。但是,它似乎只能通过转换为 TupleTypeSymbol

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

TupleTypeSymbol 由于其保护级别而无法访问,因此无法进行转换。是否有其他方式获取信息?

在我的类型是开放泛型的情况下,我也有很多相同的问题:有什么方法可以访问泛型的类型信息吗?

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