Frage

Ist es in c # möglich, eine Anordnung, die zum Beispiel, Subindex 1?

zu initialisieren

Ich bin mit Office-Interop-Arbeit, und jede Eigenschaft ist ein Objekt-Array, das in 1 beginnt (ich nehme an, es ursprünglich in VB.NET programmiert wurde), und man kann es nicht ändern, müssen Sie dafür das gesamte Array setzen um die Änderungen zu übernehmen.

Als Abhilfe, die ich bin das ursprüngliche Array Klonen, dass eine Modifizierung und es als Ganze Einstellung, wenn ich fertig bin.

Aber, ich frage mich, ob es möglich war, einen neuen nicht-Null-basierten Array erstellen

War es hilfreich?

Lösung

Andere Tipps

Es ist möglich, zu tun, wie Sie den Code unten sehen anfordern.

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

Nicht einfach. Aber man kann sicherlich Ihre eigene Klasse schreiben. Es wäre ein Array als private Variable haben, und der Benutzer würde denken, seine Anordnung bei 1 beginnt, aber wirklich beginnt es bei Null und Sie 1 von allen seinen Array sind Subtrahieren zugreift.

Sie können Ihre eigene Array-Klasse

schreiben

Das glaube ich nicht, ob es möglich ist, den Startindex von Arrays zu ändern.

Ich würde mein eigenes Array mit Generika erstellen und verarbeiten es nach innen.

Just hält von const int namens ‚Offset‘ mit einem Wert von eins, und immer, dass in Ihrem Code in Ihre Indizes hinzuzufügen.

Ich glaube nicht, dass Sie nicht Null basierte Arrays in C # erstellen können, aber man konnte leicht eine Wrapper-Klasse des eigenen rund um die eingebauten Daten structures.This Wrapper-Klasse eine private Instanz der Array-Typ halten würde schreiben Sie erforderlich; der [] Indizierungsoperator ist nicht erlaubt Überlastung, aber Sie können einen Indexer zu einer Klasse hinzufügen, um es wie ein Wende Array verhalten zu machen, finden Sie unter hier . Die Index-Funktion schreiben Sie könnten dann addiert (oder subtrahiert) 1, für alle Index übergeben.

Sie könnten dann das Objekt wie folgt verwenden, und es wäre korrekt verhalten:

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

In VB6 können Sie das Array ändern und mit 0 oder 1 zu starten, so denke ich, VBScript das gleiche tun. Für C #, ist es nicht möglich, aber man kann einfach NULL Wert in der ersten [0] und starten einen echten Mehrwert bei [1] hinzuzufügen. Natürlich, das ist ein wenig gefährlich ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top