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

Roslyn - Get TypeInfo of type parameter in another TypeInfo

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

public static TypeInfo[] GetTypeParameterInfos(this TypeInfo genericType) {
    //Do stuff
}

如果我传入一个 TypeInfo 表示 List<int>,它应该 return 一个包含 1 个 TypeInfo 表示 int 的数组。如果我传入一个 TypeInfo 表示 Dictionary<int, string>,它应该 return 一个带有 intstring TypeInfo.[=30= 的数组]

这可能吗?怎么样?


Update/Solution:

澄清一下,我问的是 Microsoft.CodeAnalysis.TypeInfo,而不是 System.Reflection.TypeInfo。这种名称混淆一直是获得有意义的 Google 结果的真正问题。然而,看起来我真正想要的是 Microsoft.CodeAnalysis.ITypeSymbol,它可以很容易地从 Roslyn TypeInfoTypeInfo.Type 属性.

获得

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

TypeInfo myGenericType = GetTypeInfoSomehow();
ImmutableArray<ITypeSymbol> typeArguments = myGenericType.Type.TypeArguments;

正如您从 source 中看到的那样,Roslyn 的 TypeInfoITypeSymbol 的一个非常薄的包装器;这就是您需要寻找有关该类型的任何有用信息的地方。

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

在你的情况下,你只需要 its TypeArguments property