Estoy aprendiendo C# y tratando de entender los aspectos "orientados a tipo" de la misma.casting system.array object to int [] cadena u objetos de otro tipo
Así que el otro día necesitaba recibir un objeto System.Array de un método. Luego traté de trabajar con sus objetos individuales, así que traté de abordarlo con un índice. El compilador no me lo permitió, diciendo que el objeto System.Array no es compatible con la indexación.
Pero no es Array es la clase base para todas las matrices (System.Array on msdn)? ¿Cómo es que int [] admite la indexación y Array [] no?
Aquí hay un código para demostrar el problema:
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
Así que lo que tenemos aquí es de 2 objetos, que parecen ser del mismo tipo. Pero uno está implementando indexación y el otro no, ¿cómo es posible?
una referencia a las respuestas
después de leer sus comentarios Creo que tengo el sentido de las cosas. int [] es una matriz de objetos. cada uno de los objetos es una estructura de tipo int32. Array [] es una matriz de objetos. cada uno de los objetos es una clase de tipo Array. significado: una matriz de matrices. que puedo mostrar en el siguiente código:
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);
y así sucesivamente ... por lo que entiende por qué la forma en que trató de acceder a los elementos de sysArray estaba mal. intArray -> 1 arreglo de muchos enteros sysArray -> 1 clase (que permite el acceso a muchos enteros)
desde el punto de vista sysArray de la lengua no es una matriz en absoluto, es sólo una referencia a 1 objeto (tipo de System.array)
(lo siento por repetir un poco, pero realmente ayuda a establecer las cosas en mi cabeza)
gracias a todos por guía en la comprensión de esa diferencia.
con respecto a las soluciones .. que lo que estaba buscando y me funcionó mejor:
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];
Tu pregunta no está clara. Un int es un objeto .... Entonces, lo que estás haciendo tiene poco sentido. –