如何获得数组T []的T部分?

时间:2015-10-13 13:13:27

标签: c# reflection types

通过反思探索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;
}

这是一个人为的,丑陋且容易出错的黑客攻击。

如何找到数组元素的类型?

1 个答案:

答案 0 :(得分:0)

Arrays早于.NET中的泛型,所以这并不奇怪。

这也意味着有一种特殊的反射方法可以准确地得到你想要的东西:

typeof(int[]).GetElementType()

为您提供System.Int32

还有其他类似方法可以获取有关数组的信息,例如GetArrayRankIsArray,以及单独的反射方法创建任意数组MakeArrayType