从表示泛型类型的TypeInfo对象开始,我希望检索泛型类型的每个类型参数的TypeInfo。我想将其公开为具有以下签名的扩展方法:
public static TypeInfo[] GetTypeParameterInfos(this TypeInfo genericType) {
//Do stuff
}如果我传入一个表示TypeInfo的List<int>,它应该返回一个数组,其中包含一个代表int的TypeInfo。如果传入一个TypeInfo表示Dictionary<int, string>,它应该返回一个带有int和string TypeInfo的数组。
这个是可能的吗?多么?
Update/Solution:
为了澄清,我问的是Microsoft.CodeAnalysis.TypeInfo,而不是System.Reflection.TypeInfo。这种名称混淆一直是一个真正的问题,以获得有意义的谷歌结果。但是,看起来我真正想要的是Microsoft.CodeAnalysis.ITypeSymbol,它可以很容易地从带有TypeInfo.Type属性的罗斯林TypeInfo中获得。
解决方案在INamedTypeSymbol.TypeArguments属性中,该属性返回与给定类型符号的类型参数对应的ImmutableArray<ITypeSymbol>。
TypeInfo myGenericType = GetTypeInfoSomehow();
ImmutableArray<ITypeSymbol> typeArguments = myGenericType.Type.TypeArguments;发布于 2016-12-12 20:06:18
从来源中可以看出,Roslyn的TypeInfo是ITypeSymbol的一个非常薄的包装器,您需要在那里查找有关该类型的有用信息。
如果该类型实际上是一个泛型类型(与数组或指针等特殊类型相反),它实际上将是一个INamedTypeSymbol,它拥有调查该类型所需的所有API。
在你的例子中,你只想要属性。
https://stackoverflow.com/questions/41108187
复制相似问题