从代表通用类型的TypeInfo
对象开始,我想为通用类型的每个类型参数检索TypeInfo
s。我想将其作为具有此签名的扩展方法公开:
public static TypeInfo[] GetTypeParameterInfos(this TypeInfo genericType) {
//Do stuff
}
如果我通过代表List<int>
的TypeInfo
传递,则应返回一个包含1个TypeInfo
代表int
的数组。如果我通过TypeInfo
代表Dictionary<int, string>
,则应返回带有int
和string
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;
正如您可以从源头所看到的那样,罗斯琳的TypeInfo
是ITypeSymbol
周围非常薄的包装器;这就是您需要寻找有关类型有用的任何东西的地方。
如果类型实际上是一种通用类型(与阵列或指针(如数组或指针)相反,它实际上将是一个InamedTytyPesymbol,它具有研究类型所需的所有API。
在您的情况下,您只需要其TypeArguments
属性。