Roslyn - 在另一个 TypeInfo 中获取类型参数的 TypeInfo

Jam*_*aix 5 c# roslyn

TypeInfo表示泛型类型的对象开始,我想为泛型类型TypeInfo的每个类型参数检索s。我想将此作为具有此签名的扩展方法公开:

public static TypeInfo[] GetTypeParameterInfos(this TypeInfo genericType) {
    //Do stuff
}
Run Code Online (Sandbox Code Playgroud)

如果我传入一个TypeInfo代表List<int>,它应该返回一个包含 1TypeInfo代表的数组int。如果我传入一个TypeInforepresnting Dictionary<int, string>,它应该返回一个带有 anint和 a的数组string TypeInfo

这可能吗?如何?


更新/解决方案:

澄清一下Microsoft.CodeAnalysis.TypeInfo,我问的是,而不是System.Reflection.TypeInfo。这种名称混淆一直是获得有意义的 Google 结果的真正问题。但是,看起来我真正想要的是Microsoft.CodeAnalysis.ITypeSymbol,可以从TypeInfo拥有该TypeInfo.Type财产的 Roslyn 轻松获得。

解决方案是在INamedTypeSymbol.TypeArguments属性中,它返回一个ImmutableArray<ITypeSymbol>对应于给定类型符号的类型参数。

TypeInfo myGenericType = GetTypeInfoSomehow();
ImmutableArray<ITypeSymbol> typeArguments = myGenericType.Type.TypeArguments;
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

源代码可以看出,RoslynTypeInfo是一个非常薄的包装器ITypeSymbol;这就是您需要寻找有关该类型的任何有用信息的地方。

如果类型实际上是泛型类型(与数组或指针等特殊类型相反),则它实际上是INamedTypeSymbol,它具有调查类型所需的所有 API。

在您的情况下,您只想要它的TypeArgumentsproperty