Freigeben über


ReDim-Anweisung (Visual Basic)

Reserviert Speicherplatz für eine Arrayvariable neu.

ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]

Bestandteile

Ausdruck

Definition

Preserve

Optional. Modifizierer zum Beibehalten der Daten im vorhandenen Array, wenn nur die Größe der letzten Dimension geändert wird.

name

Erforderlich. Name der Arrayvariablen. Weitere Informationen finden Sie unter Namen deklarierter Elemente (Visual Basic).

boundlist

Erforderlich. Liste der Grenzen jeder Dimension des neu definierten Arrays.

Hinweise

Mit der ReDim-Anweisung können Sie die Größe einer oder mehrerer Dimensionen eines Arrays ändern, das bereits deklariert wurde. Wenn es sich um ein umfangreiches Array handelt und Sie einige seiner Elemente nicht mehr benötigen, kann mit ReDim durch Verringern der Arraygröße Speicher freigegeben werden. Wenn Code hingegen bestimmt, dass ein Array mehr Elemente erfordert, können diese mit ReDim hinzugefügt werden.

Die ReDim-Anweisung ist nur für Arrays vorgesehen. Für Skalarvariablen (Variablen, die nur einen einzelnen Wert enthalten), Auflistungen oder Strukturen ist sie nicht gültig. Beachten Sie, dass beim Deklarieren des Typs Array für eine Variable die ReDim-Anweisung nicht genügend Typinformationen zum Erstellen des neuen Arrays enthält.

ReDim kann nur auf Prozedurebene verwendet werden. Dies bedeutet, dass der Deklarationskontext für eine Variable eine Prozedur sein muss und keine Quelldatei, kein Namespace, keine Schnittstelle, keine Klasse, keine Struktur, kein Modul und kein Block sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen (Visual Basic).

Regeln

  • Modifizierer. Sie können nur den Preserve-Modifizierer angeben, und in diesem Fall dürfen Sie das ReDim-Schlüsselwort nicht weglassen.

  • Mehrere Variablen. Sie können die Größe mehrerer Arrayvariablen in derselben Deklarationsanweisung ändern, indem Sie für jede Arrayvariable den name-Teil und den boundlist-Teil angeben. Mehrere Variablen werden durch Komma voneinander getrennt.

  • Arraygrenzen. Jeder Eintrag in boundlist kann die Unter- und Obergrenze der betreffenden Dimension angeben. Die Untergrenze ist immer 0 (null), unabhängig davon, ob Sie sie angeben. Die Obergrenze ist der höchste mögliche Wert für diesen Feldindex und nicht die Länge der Dimension (die durch die Obergrenze plus eins bestimmt wird). Jeder Feldindex kann zwischen 0 (null) und dem Wert seiner Obergrenze betragen.

    Die Anzahl der Dimensionen in boundlist muss dem ursprünglichen Arrayrang entsprechen.

  • Leere Arrays. Die Obergrenze einer Arraydimension kann mit -1 deklariert werden. Dies bedeutet, dass das Array leer, jedoch nicht Nothing (Visual Basic) ist. Weitere Informationen finden Sie unter Arrays in Visual Basic. Visual Basic-Code kann auf ein solches Array jedoch nicht erfolgreich zugreifen. Bei einem Zugriffsversuch wird während der Ausführung ein IndexOutOfRangeException-Fehler ausgelöst.

  • Datentypen. Mit der ReDim-Anweisung kann der Datentyp einer Arrayvariablen oder ihrer Elemente nicht geändert werden.

  • Initialisierung. Die ReDim-Anweisung kann keine neuen Initialisierungswerte für die Arrayelemente bereitstellen.

  • Rang. Mit der ReDim-Anweisung kann der Rang (die Anzahl der Dimensionen) des Arrays nicht geändert werden.

  • Ändern der Größe mit Preserve. Mit Preserve können Sie nur die Größe der letzten Dimension des Arrays ändern. Für alle anderen Dimensionen muss dieselbe Grenze wie im vorhandenen Array angegeben werden.

    Wenn das Array z. B. nur eine Dimension hat, können Sie die Größe dieser Dimension ändern und dennoch den Inhalt des Arrays beibehalten. Dies ist möglich, da Sie die letzte und einzige Dimension ändern. Hat das Array jedoch zwei oder mehr Dimensionen, können Sie mit Preserve lediglich die Größe der letzten Dimension ändern.

  • Eigenschaften. Sie können ReDim für eine Eigenschaft verwenden, die ein Wertearray aufweist.

Verhalten

  • Arrayersetzung. ReDim gibt das vorhandene Array frei und erstellt ein neues Array mit demselben Rang. Das neue Array ersetzt das freigegebene Array in der Arrayvariablen.

  • Initialisierung ohne Preserve. Wenn Sie nicht Preserve angeben, werden mit ReDim die Elemente des neuen Arrays mit dem Standardwert ihres Datentyps initialisiert.

  • Initialisierung mit Preserve. Wenn Sie den Preserve-Modifizierer angeben, kopiert Visual Basic die Elemente aus dem vorhandenen Array in das neue Array.

Beispiel

Im folgenden Beispiel wird die letzte Dimension eines dynamischen Arrays vergrößert, ohne dass Daten im vorhandenen Array verloren gehen. Anschließend wird es mit partiellem Datenverlust verkleinert. Schließlich wird die Größe auf den ursprünglichen Wert verringert, und alle Arrayelemente werden neu initialisiert.

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

Mit dem ersten ReDim wird ein neues Array erstellt, das das vorhandene Array in der Variablen intArray ersetzt. Mit ReDim werden alle Elemente aus dem vorhandenen Array in das neue Array kopiert. Außerdem werden dem Ende jeder Zeile auf jeder Ebene 10 weitere Spalten hinzugefügt und die Elemente in diesen neuen Spalten mit 0 (dem Standardwert von Integer, dem Elementtyp des Arrays) initialisiert.

Mit der zweiten ReDim-Anweisung wird ein weiteres neues Array erstellt. Alle Elemente, die aufgenommen werden können, werden kopiert. Auf jeder Ebene gehen jedoch 5 Spalten an Ende jeder Zeile verloren. Dies ist kein Problem, wenn Sie diese Spalten nicht mehr benötigen. Es kann sehr hilfreich sein, ein großes Array zu verkleinern, um wertvollen Speicher, der nicht mehr benötigt wird, freizugeben.

Mit dem dritten ReDim wird ein weiteres neues Array erstellt, und am Ende jeder Zeile auf der neuen Ebene werden weitere fünf Spalten entfernt. In diesem Fall werden keine vorhandenen Elemente kopiert. Hierdurch wird die ursprüngliche Größe des Arrays wiederhergestellt, und alle Arrayelemente werden auf ihren ursprünglichen Standardwert zurückgesetzt.

Siehe auch

Referenz

Const-Anweisung (Visual Basic)

Dim-Anweisung (Visual Basic)

Erase-Anweisung (Visual Basic)

Nothing (Visual Basic)

IndexOutOfRangeException

Konzepte

Arrays in Visual Basic