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



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

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

如果我通过代表List<int>TypeInfo传递,则应返回一个包含1个TypeInfo代表int的数组。如果我通过TypeInfo代表Dictionary<int, string>,则应返回带有intstring TypeInfo的数组。

这可能吗?如何?


更新/解决方案:

要澄清,我询问Microsoft.CodeAnalysis.TypeInfo,而不是System.Reflection.TypeInfo。这个名字混乱是获得有意义的Google结果的真正问题。但是,看来我真正想要的是Microsoft.CodeAnalysis.ITypeSymbol,它可以从TypeInfo.Type属性的Roslyn TypeInfo轻松获取。

该解决方案在INamedTypeSymbol.TypeArguments属性中,该属性返回与给定类型符号的类型参数相对应的ImmutableArray<ITypeSymbol>

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

正如您可以从源头所看到的那样,罗斯琳的TypeInfoITypeSymbol周围非常薄的包装器;这就是您需要寻找有关类型有用的任何东西的地方。

如果类型实际上是一种通用类型(与阵列或指针(如数组或指针)相反,它实际上将是一个InamedTytyPesymbol,它具有研究类型所需的所有API。

在您的情况下,您只需要其TypeArguments属性。

最新更新