我正在编写Roslyn分析器,遇到了需要了解元组类型的需求。我已经检索到TypeInfo
,在调试器中,我看到有一个挂在Type上的TupleElements,这正是我所需要的。但是,似乎只能通过强制转换为TupleTypeSymbol
((Microsoft.CodeAnalysis.CSharp.Symbols.TupleTypeSymbol)typeInfo.Type).TupleElements
由于其保护级别,TupleTypeSymbol无法访问,因此无法进行强制转换。还有其他访问信息的方式吗?
在我的类型是开放的泛型的情况下,我有很多相同的问题:是否可以通过某种方式访问泛型的类型信息?
答案 0 :(得分:0)
INamedTypeSymbol
并从中获取基础元组类型:(type as INamedTypeSymbol)?.TupleUnderlyingType
,此后,您将获得通常的ITypeSymbol
泛型类型,最后,只需接受泛型类型参数:(type as INamedTypeSymbol)?.TupleUnderlyingType.TypeArguments
T1
中的T2
和Gen<T1,T2>
,您实际上可以做同样的事情:将类型强制转换为{ {1}},并从中获取INamedTypeSymbol
(如果类型为开放或封闭的通用类型)