Istruzione ReDim (Visual Basic)

Aggiornamento: novembre 2007

Rialloca lo spazio di memorizzazione per una variabile della matrice.

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

Parti

  • Preserve
    Facoltativo. Modificatore utilizzato per mantenere i dati nella matrice esistente quando si modificano le dimensioni esclusivamente dell'ultima dimensione.

  • name
    Obbligatorio. Nome della variabile della matrice. Per informazioni, vedere Nomi di elementi dichiarati.

  • boundlist
    Obbligatorio. Elenco dei limiti di ogni dimensione della matrice ridefinita.

Note

È possibile utilizzare l'istruzione ReDim per modificare la dimensione di uno o più dimensioni di una matrice che è già stata dichiarata. Se si dispone di una matrice di grandi dimensioni e non si necessita più di alcuni dei suoi elementi, ReDim può liberare un po' di memoria riducendo le dimensioni della matrice. Dall'altra parte invece, se il codice determina che una matrice necessita di più elementi, ReDim sarà in grado di aggiungerli.

L'istruzione ReDim è progettata solo per le matrici, mentre non è valida sui valori scalari (variabili contenenti solo un valore singolo), sugli insiemi o sulle strutture. Si noti che se si dichiara una variabile di tipo Array, l'istruzione ReDim non avrà informazioni di tipo sufficienti per creare la nuova matrice.

La parola chiave ReDim può essere utilizzata solo a livello di routine Ciò significa che è necessario che il contesto della dichiarazione di una variabile sia una routine e non un file di origine, uno spazio dei nomi, un'interfaccia, una classe, una struttura, un modulo o un blocco. Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefinito.

Regole

  • Modificatori.In questo modo è possibile specificare solo il modificatore Preserve e non omettere la parola chiave ReDim.

  • Variabili multiple. È possibile ridimensionare numerose variabili di matrice nella stessa istruzione di dichiarazione, specificando le parti name e boundlist di ognuno. Le variabili sono separate da una virgola.

  • Limiti della matrice. Con ogni voce di boundlist è possibile specificare i limiti inferiori e superiori di quella dimensione. Il limite inferiore corrisponde sempre a zero, che lo si specifichi o meno. Il limite superiore è il valore massimo possibile per quell'indice e non la lunghezza della dimensione (che corrisponde al limite massimo più uno). Ogni indice può variare da zero al suo livello di limite superiore.

    Il numero delle dimensioni di boundlist deve corrispondere alla classifica originale della matrice.

  • Matrici vuote. È possibile utilizzare -1 per dichiarare il limite superiore della dimensione di una matrice. Ciò significa che la matrice è vuota ma non Nothing (Visual Basic). Per ulteriori informazioni, vedere Procedura: creare una matrice senza elementi. L'accesso a tale matrice tuttavia non può essere effettuato correttamente mediante il codice Visual Basic. Se si cerca di farlo, si verificherà un errore IndexOutOfRangeException durante l'esecuzione.

  • Tipi di dati. L'istruzione ReDim non è in grado di modificare il tipo di dati della variabile di una matrice o dei suoi elementi.

  • Inizializzazione. L'istruzione ReDim non è in grado di fornire nuovi valori di inizializzazione per gli elementi della matrice.

  • Classifica. L'istruzione ReDim non è in grado di modificare la classifica (il numero delle dimensioni) della matrice.

  • Ridimensionamento con Preserve. Se si utilizza Preserve, è possibile ridimensionare solo l'ultima dimensione della matrice, mentre per ogni altra dimensione sarà necessario specificare lo stesso limite già presente nella matrice esistente.

    Se ad esempio la matrice ha un'unica dimensione, è possibile ridimensionare quest'ultima e mantenere ancora tutto il contenuto della matrice, in quanto si sta modificando l'ultima e unica dimensione. Nelle matrici con due o più dimensioni, invece, è consentito ridimensionare solo l'ultima dimensione quando si utilizza la parola chiave Preserve.

  • Proprietà. È possibile utilizzare ReDim su una proprietà che contiene una matrice di valori.

Comportamento

  • **Sostituzione della matrice.**ReDim consente di rilasciare la matrice esistente e di crearne una nuova con la stessa classifica. La nuova matrice sostituisce quella rilasciata nella variabile di matrice.

  • Inizializzazione senza Preserve. Se non si specifica Preserve, ReDim inizializza gli elementi della nuova matrice al valore predefinito per il loro tipo di dati.

  • Inizializzazione con Preserve. Se si specifica il modificatore Preserve, gli elementi verranno copiati dalla matrice esistente a quella nuova.

Esempio

Nell'esempio seguente la dimensione dell'ultima dimensione di una matrice dinamica aumenta senza perdere i dati esistenti nella matrice, quindi diminuisce con una perdita parziale dei dati. Infine la dimensione diminuirà tornando al suo valore originale e tutti gli elementi della matrice verranno reinizializzati.

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

La prima ReDim crea una nuova matrice che sostituisce quella esistente nella variabile intArray. ReDim copia tutti gli elementi dalla matrice esistente alla matrice nuova. Vengono inoltre aggiunte 10 colonne al termine di ogni riga di ogni livello e vengono inizializzati gli elementi in queste nuove colonne a 0 (valore predefinito di Integer, il tipo di elemento della matrice).

La seconda istruzione ReDim consente di creare una nuova matrice, copiando tutti gli elementi che quest'ultima può contenere. Verranno tuttavia perdute 5 colonne alla fine di ogni riga in ogni livello. Se le colonne non vengono più utilizzate, non si verificherà alcun problema. Riducendo matrici di grandi dimensioni si libera memoria altrimenti inutilizzata.

La terza ReDim crea ancora un'altra nuova serie, rimuovendo ancora cinque colonne dalla fine di ogni riga di ogni livello. Questa volta non copia alcun elemento esistente. In questo modo la matrice viene ripristinata alla sua dimensione originale e restituisce tutti i suoi elementi al valore predefinito originale.

Vedere anche

Attività

Procedura: creare una matrice senza elementi

Concetti

Istruzione ReDim per gli utenti di Visual Basic 6.0

Dichiarazione della dimensione delle matrici per gli utenti di Visual Basic 6.0

Riferimenti

Istruzione Const (Visual Basic)

Istruzione Dim (Visual Basic)

Istruzione Erase (Visual Basic)

Nothing (Visual Basic)

IndexOutOfRangeException