resueltos - Inicializando una matriz en el índice de inicio arbitrario en c#
llenar un arreglo en c# (8)
¿Es posible en c # inicializar una matriz en, por ejemplo, subíndice 1?
Estoy trabajando con la interoperabilidad de Office, y cada propiedad es una matriz de objetos que comienza en 1 (supongo que fue originalmente programada en VB.NET), y no puede modificarla, tiene que configurar toda la matriz para que acepte el cambios.
Como solución alternativa, estoy clonando la matriz original, modificando esa, y configurándola como un todo cuando termino.
Pero, me preguntaba si era posible crear una nueva matriz basada en cero
En VB6 puedes cambiar la matriz para comenzar con 0 o 1, así que creo que VBScript puede hacer lo mismo. Para C #, no es posible, pero puede simplemente agregar valor NULL en el primero [0] e iniciar el valor real en [1]. Por supuesto, esto es un poco peligroso ...
Es posible hacer lo que solicite ver el código a continuación.
// Construct an array containing ints that has a length of 10 and a lower bound of 1
Array lowerBoundArray = Array.CreateInstance(typeof(int), new int[1] { 10 }, new int[1] { 1 });
// insert 1 into position 1
lowerBoundArray.SetValue(1, 1);
//insert 2 into position 2
lowerBoundArray.SetValue(2, 2);
// IndexOutOfRangeException the lower bound of the array
// is 1 and we are attempting to write into 0
lowerBoundArray.SetValue(1, 0);
No creo que pueda crear matrices que no sean basadas en cero en C #, pero podría escribir fácilmente una clase contenedora propia alrededor de las estructuras de datos integradas. Esta clase contenedora contendría una instancia privada del tipo de matriz que requería; no se permite sobrecargar el operador de indexación [], pero puede agregar un indexador a una clase para que se comporte como una matriz indexable, consulte aquí . La función de índice que escriba podría agregar (o restar) 1 a todos los índices ingresados.
Luego podría usar su objeto de la siguiente manera, y se comportaría correctamente:
myArrayObject[1]; //would return the zeroth element.
No creo que sea posible modificar el índice inicial de las matrices.
Crearía mi propio arreglo usando genéricos y lo manejaría adentro.
No simplemente. Pero ciertamente puedes escribir tu propia clase. Tendría una matriz como variable privada, y el usuario pensaría que su matriz comienza en 1, pero en realidad comienza en cero y resta 1 de todos sus accesos a la matriz.
Puedes escribir tu propia clase de matriz
Simplemente conserve const int named ''offset'' con un valor de uno, y siempre agregue eso a sus subíndices en su código.
Puedes usar Array.CreateInstance
.
Consulte Tipos de matrices en .NET