Domanda

È possibile in C# inizializzare un array, ad esempio, nel sottoindice 1?

Sto lavorando con l'interoperabilità di Office e ogni proprietà è un array di oggetti che inizia con 1 (presumo che fosse originariamente programmato in VB.NET) e non puoi modificarlo, devi impostare l'intero array affinché accetti il i cambiamenti.

Per ovviare al problema, sto clonando l'array originale, modificandolo e impostandolo nel suo insieme quando ho finito.

Ma mi chiedevo se fosse possibile creare un nuovo array basato su diverso da zero

È stato utile?

Soluzione

Altri suggerimenti

E' possibile fare come richiesto vedi il codice qui sotto.

// 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);

Non semplicemente.Ma puoi certamente scrivere la tua lezione.Avrebbe un array come variabile privata e l'utente penserebbe che il suo array inizia da 1, ma in realtà inizia da zero e stai sottraendo 1 da tutti i suoi accessi all'array.

Puoi scrivere la tua classe di array

Non penso che sia possibile modificare l'indice iniziale degli array.

Vorrei creare il mio array utilizzando i generici e gestirlo all'interno.

Mantieni semplicemente const int denominato "offset" con un valore pari a uno e aggiungilo sempre ai pedici nel codice.

Non penso che tu possa creare array basati su valori diversi da zero in C#, ma potresti facilmente scrivere una tua classe wrapper attorno alle strutture dati integrate. Questa classe wrapper conterrebbe un'istanza privata del tipo di array richiesto;non è consentito sovraccaricare l'operatore di indicizzazione [], ma è possibile aggiungere un indicizzatore a una classe per farlo comportare come un array indicizzabile, vedere Qui.La funzione di indice che scrivi potrebbe quindi aggiungere (o sottrarre) 1 a tutti gli indici passati.

Potresti quindi utilizzare il tuo oggetto come segue e si comporterebbe correttamente:

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

In VB6 potresti cambiare l'array in modo che inizi con 0 o 1, quindi penso che VBScript possa fare lo stesso.Per C#, non è possibile ma puoi semplicemente aggiungere il valore NULL nel primo [0] e iniziare il valore reale da [1].Certo, questo è un po' pericoloso...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top