2016-07-09 3 views
0

Вот что у меня естьОпределить размер массива после GetType()

 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???? 
     } 

Есть ли способ, чтобы определить длину массива с помощью типа?

+0

На каком языке это написано? –

+0

Думаю, увидим резкое –

+0

Вам нужно будет использовать Type.GetProperty(). Сначала прочитайте свойство Rank, чтобы проверить, сколько измерений имеет массив. Если вы довольны 1, прочитайте свойство Length. –

ответ

1

Там нет информации о типе относительно размера массива. Это всего лишь массив, не более того.

Таким образом, единственный способ получить размер - вернуться к экземпляру. Там, и только там вы можете найти размер массива.

Вы можете сделать это, запросив свойство Length, используя отражение.

+0

Спасибо, слишком плохо :( – walruz

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 
+0

И в первой интерпретации вам не нужно 'GetType()', вы можете: var a = x as Array; if (a! = null) {var length = a.Length;/* ... * /} ' –

0

Используя отражение, вы не можете получить длину массива. Вы можете получить доступ к свойствам объекта, знать их типы и методы, предоставляемые этим объектом (классом). Но вы не можете воссоздать или узнать, что было длиной массива, зная только его тип.

0

Массивы различной длины будут иметь одинаковые типы, например new int[10] и new int[11] имеют одинаковые (временные) типы.

Это означает, что вы не можете восстановить длину только от System.Type; вам нужна ссылка на фактический экземпляр массива.

Смежные вопросы