2008-09-17 5 views
6

¿Es posible en C# inicializar una matriz en, por ejemplo, subíndice 1?Inicialización de una matriz en índice de inicio arbitrario en C#

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, debe configurar toda la matriz para aceptar los 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 distinto de cero

+1

vb.net las matrices comienzan en 0, también. –

+0

Pero puede crearlos si quiere que no (nueva Matriz (3 a 5) o algo así) – juan

Respuesta

0

Usted puede escribir su propia clase Array

-1

En VB6 que podría cambiar la matriz para comenzar con 0 o 1 , entonces 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 ...

+0

Las propiedades requieren que la matriz comience en 1, por lo que esto no funcionaría – juan

1

No es 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.

+1

Sí, siempre puede hacer cualquier cosa usted mismo ... la pregunta es si se puede hacer con la sintaxis de C# – juan

0

No creo que si es posible modificar el índice de partida de matrices.

Crearía mi propia matriz usando genéricos y la manejaría dentro.

0

Solo conserve const int llamado 'offset' con un valor de uno, y siempre agregue eso a sus subíndices en su código.

0

No creo que pueda crear matrices basadas en cero en C#, pero podría escribir fácilmente una propia clase contenedora alrededor de las estructuras de datos integradas. Esta clase contenedora contendría una instancia privada del tipo de matriz usted requirió; 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 here. La función de índice se escribe a continuación, podría sumar (o restar) 1, a todos los índices del pasado en

A continuación, puede utilizar el objeto como se indica, y se comportaría correctamente:.

myArrayObject[1]; //would return the zeroth element. 
17

Es posible haz lo que solicites, mira 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); 
+5

+1: Un bloque de código útil vale mil enlaces de prosa ilegible * sobre * código. –

+0

¿hay alguna forma de escribir esto como int [] en lugar de Array? – JJS

Cuestiones relacionadas