【发布时间】:2016-12-12 19:33:04
【问题描述】:
从代表泛型类型的TypeInfo 对象开始,我想为泛型类型的每个类型参数检索TypeInfos。我想将此作为具有此签名的扩展方法公开:
public static TypeInfo[] GetTypeParameterInfos(this TypeInfo genericType) {
//Do stuff
}
如果我传入一个代表 List<int> 的 TypeInfo,它应该返回一个包含 1 个代表 int 的 TypeInfo 的数组。如果我传入代表Dictionary<int, string> 的TypeInfo,它应该返回一个包含int 和string TypeInfo 的数组。
这可能吗?怎么样?
更新/解决方案:
为了澄清,我问的是Microsoft.CodeAnalysis.TypeInfo,而不是System.Reflection.TypeInfo。这种名称混淆一直是获得有意义的谷歌结果的一个真正问题。但是,看起来我真正想要的是Microsoft.CodeAnalysis.ITypeSymbol,它可以很容易地从带有TypeInfo.Type 属性的Roslyn TypeInfo 获得。
解决方案在INamedTypeSymbol.TypeArguments 属性中,它返回与给定类型符号的类型参数对应的ImmutableArray<ITypeSymbol>。
TypeInfo myGenericType = GetTypeInfoSomehow();
ImmutableArray<ITypeSymbol> typeArguments = myGenericType.Type.TypeArguments;
【问题讨论】:
-
您是指 Roslyn
ITypeSymbol还是 ReflectionTypeInfo?他们彼此无关。 -
我指的是 Roslyn 的
Microsoft.CodeAnalysis.TypeInfo,而不是System.Reflection.TypeInfo。 Roslyn 还有ITypeSymbol接口,可以从Microsoft.CodeAnalysis.TypeInfo获取,所以我也可以使用基于ITypeSymbol的解决方案。 -
我不断遇到
System.Reflection.TypeInfo的搜索结果。