在 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
- 如果你想获取有关开放泛型类型参数的信息,例如
T1
和 T2
中的 Gen<T1,T2>
,你实际上可以做同样的事情:转换你的类型到 INamedTypeSymbol
并从中取 TypeParameters
,如果类型是开放或封闭的泛型类型
我正在编写一个 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
- 如果你想获取有关开放泛型类型参数的信息,例如
T1
和T2
中的Gen<T1,T2>
,你实际上可以做同样的事情:转换你的类型到INamedTypeSymbol
并从中取TypeParameters
,如果类型是开放或封闭的泛型类型