在GetType()之后确定数组大小

时间:2016-07-09 12:53:38

标签: c#

这就是我所拥有的

        int[] x = new int[10];

        Type type = x.GetType();
        if (type.IsArray)
        {
            Type typeOfElement = type.GetElementType();
            int length = 0; // how do I get array's length????
        }

有没有办法使用Type确定数组的长度?

4 个答案:

答案 0 :(得分:1)

使用Array.Length

int[] x = new int[10];

Type type = x.GetType();
if (type.IsArray)
{
    int length = (x as Array).Length;
}

编辑:刚刚意识到您询问的是从类型中获取长度而不是从实例中获取长度。你不能这样做,因为你的类型永远是一个数组,它们的大小无关紧要:

int[] arr1 = new int[10];
int[] arr2 = new int[11];

bool areEqual = arr1.GetType() == arr2.GetType(); // true

答案 1 :(得分:1)

没有关于阵列大小的类型信息。它只是一个数组,仅此而已。

因此获得大小的唯一方法是返回实例。 那里,只有那里,你可以找到数组的大小。

您可以通过使用反射查询Length属性来实现此目的。

答案 2 :(得分:0)

使用反射,你无法获得数组的长度。您可以访问该对象的属性,了解该对象(类)提供的类型和方法。 但是你不能通过知道它的类型来重新创建或知道数组的长度。

答案 3 :(得分:0)

不同长度的数组将具有相同的类型,例如new int[10]new int[11]具有相同的(运行时)类型。

这意味着您无法仅从System.Type重建长度;你需要对实际数组实例的引用。