通过反思探索IEnumerable<T>
等通用类型时,我可以通过以下方式找到T
:
public Type Demo<TSequence>()
{
return typeof(TSequence).GenericTypeArguments[0];
}
例如:
typeof(Collection<short>).GenericTypeArguments[0].FullName == "System.Int16"
数组的细节意味着这种方法不适用于数组,因为它们本身没有通用参数。我发现实际获得数组元素类型的唯一方法是:
public Type Demo<TArray>()
{
return typeof(TArray)
.GetTypeInfo()
.DeclaredMethods
.Single(m => m.Name == "Get")
.ReturnType;
}
这是一个人为的,丑陋且容易出错的黑客攻击。
如何找到数组元素的类型?
答案 0 :(得分:0)
Arrays早于.NET中的泛型,所以这并不奇怪。
这也意味着有一种特殊的反射方法可以准确地得到你想要的东西:
typeof(int[]).GetElementType()
为您提供System.Int32
。
还有其他类似方法可以获取有关数组的信息,例如GetArrayRank
和IsArray
,以及单独的反射方法创建任意数组MakeArrayType
。