Istruzione ReDim (Visual Basic)
Rialloca lo spazio di memorizzazione per una variabile della matrice.
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Parti
Argomento |
Definizione |
Preserve |
Facoltativo. Modificatore utilizzato per mantenere i dati nella matrice esistente quando si modificano le dimensioni esclusivamente dell'ultima dimensione. |
name |
Obbligatoria. Nome della variabile della matrice. Per informazioni, vedere Nomi di elementi dichiarati (Visual Basic). |
boundlist |
Obbligatoria. 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 predefiniti (Visual Basic).
Regole
Modificatori. È possibile specificare solo il modificatore Preserve e, in tal caso, non è possibile omettere la parola chiave ReDim.
Più variabili. È possibile ridimensionare numerose variabili di matrice nella stessa istruzione di dichiarazione, specificando le parti name e boundlist di ognuna. Le variabili sono separate da una virgola.
Limiti di matrici. Ogni voce di boundlist può specificare il limite inferiore e quello superiore della dimensione. Il limite inferiore corrisponde sempre a zero, indipendentemente dal fatto che venga specificato 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 di una dimensione di matrice. Ciò significa che la matrice è vuota ma non Nothing (Visual Basic). Per ulteriori informazioni, vedere Matrici in Visual Basic. 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 di una variabile di 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 il rango, ovvero il numero di dimensioni, della matrice.
Ridimensionamento con Preserve. Se si utilizza Preserve, è possibile ridimensionare solo l'ultima dimensione della matrice, mentre per ogni altra dimensione è 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, tramite ReDim gli elementi della nuova matrice vengono inizializzati sul valore predefinito per il relativo tipo di dati.
Inizializzazione con Preserve. Se si specifica il modificatore Preserve, gli elementi vengono 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 istruzione ReDim crea una nuova matrice che sostituisce quella esistente nella variabile intArray. ReDim copia tutti gli elementi dalla matrice esistente a quella 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
Riferimenti
Istruzione Const (Visual Basic)
Istruzione Erase (Visual Basic)