преобразование объекта system.array в строку int [] или объекты другого типа

Я изучаю C # и пытаюсь понять его «типо-ориентированные» аспекты.

Итак, на днях мне нужно было получить объект System.Array из метода. Затем я попытался работать с его отдельными объектами, поэтому я попытался решить его с помощью индекса. Компилятор мне не позволил, сказав, что объект System.Array не поддерживает индексацию.

Но разве Array не является базовым классом для всех массивов ( System.Array на msdn )? Каким образом int [] поддерживает индексацию, а Array [] - нет?

вот код, демонстрирующий проблему:

int[] intArray = {1,2,3,4,5,6,7,8,9,10};
int t;
Array sysArray;       
Console.WriteLine("{0}", intArray.GetType().ToString()); // output: System.Int32[]
sysArray = Array.CreateInstance(typeof(int), 10);
Console.WriteLine("{0}", sysArray.GetType().ToString()); // output: System.Int32[]
sysArray = intArray; //compiles ok
//t = sysArray[4]; This line produces error Error 2 Cannot apply indexing with [] to an
// expression of type 'System.Array'
//t = intArray[4]; This line compiles ok

Итак, у нас есть 2 объекта, которые кажутся одного типа. Но один реализует индексацию, а другой нет, как это возможно?


ссылка на ответы

после прочтения ваших комментариев, я думаю, что у меня есть смысл. int [] - это массив объектов. каждый из объектов представляет собой структуру типа int32. Array [] - это массив объектов. каждый из объектов является классом типа Array. значение: массив массивов. как я могу отобразить в следующем коде:

Array[] sysArrayOfArray = new Array[SIZE_OF_THE_MOTHER_ARRAY];
sysArrayOfArray[0] = Array.CreateInstance(typeof(int),SIZE_OF_FIRST_CHILD_ARRAY);
sysArrayOfArray[1] = Array.CreateInstance(typeof(int),SIZE_OF_FIRST_SECOND_ARRAY);

и так далее ... так что я понял, почему способ, которым я пытался получить доступ к элементам sysArray, был неправильным. intArray -> 1 массив из множества целых чисел sysArray -> 1 класс (который предоставляет доступ ко многим int)

с точки зрения языка sysArray вообще не является массивом, это всего лишь ссылка на 1 объект (типа System.Array)

(извините, что немного повторюсь, но это действительно помогает мне запомнить)

спасибо всем за руководство в понимании этой разницы.

относительно решений .. то, что я искал и сработало для меня лучше всего:

 Array sysArray = Array.CreateInstance(typeof(int),3);
 int[] intArray = new int[3];
 int one, ten, hundred;
 sysArray.SetValue(1, 0);
 sysArray.SetValue(10,1);
 sysArray.SetValue(100,2);
 intArray = (int[])sysArray;// works, but forces me to create a new reference
 one = ((int[])sysArray)[0];// works and is exactly what i was looking for...
 ten = ((int[])sysArray)[1];
 hundred = ((int[])sysArray)[2];    

13
задан Eliy Arlev 30 December 2011 в 20:56
поделиться