Risoluzione dei problemi relativi alle matrici (Visual Basic)Troubleshooting Arrays (Visual Basic)

In questa pagina vengono elencati alcuni problemi comuni che possono verificarsi quando si utilizzano matrici.This page lists some common problems that can occur when working with arrays.

Errori di compilazione che dichiarano e inizializzano una matriceCompilation Errors Declaring and Initializing an Array

Gli errori di compilazione possono derivare dalla comprensione delle regole per la dichiarazione, la creazione e l'inizializzazione di matrici.Compilation errors can arise from misunderstanding of the rules for declaring, creating, and initializing arrays. Di seguito sono riportate le cause più comuni degli errori:The most common causes of errors are the following:

  • Fornire una nuova clausola operator dopo aver specificato le lunghezze della dimensione nella dichiarazione della variabile di matrice.Supplying a New Operator clause after specifying dimension lengths in the array variable declaration. Nelle righe di codice seguenti vengono mostrate dichiarazioni non valide di questo tipo.The following code lines show invalid declarations of this type.

    Dim INVALIDsingleDimByteArray(2) As Byte = New Byte()

    Dim INVALIDtwoDimShortArray(1, 1) As Short = New Short(,)

    Dim INVALIDjaggedByteArray(1)() As Byte = New Byte()()

  • Specifica delle lunghezze delle dimensioni per più della matrice di primo livello di una matrice irregolare.Specifying dimension lengths for more than the top-level array of a jagged array. La seguente riga di codice mostra una dichiarazione non valida di questo tipo.The following code line shows an invalid declaration of this type.

    Dim INVALIDjaggedByteArray(1)(1) As Byte

  • Omettere la parola chiave New quando si specificano i valori dell'elemento.Omitting the New keyword when specifying the element values. La seguente riga di codice mostra una dichiarazione non valida di questo tipo.The following code line shows an invalid declaration of this type.

    Dim INVALIDoneDimShortArray() As Short = Short() {0, 1, 2, 3}

  • Specifica di una clausola New senza parentesi graffe ({}).Supplying a New clause without braces ({}). Nelle righe di codice seguenti vengono mostrate dichiarazioni non valide di questo tipo.The following code lines show invalid declarations of this type.

    Dim INVALIDsingleDimByteArray() As Byte = New Byte()

    Dim INVALIDsingleDimByteArray() As Byte = New Byte(2)

    Dim INVALIDtwoDimShortArray(,) As Short = New Short(,)

    Dim INVALIDtwoDimShortArray(,) As Short = New Short(1, 1)

Accesso a una matrice fuori limiteAccessing an Array Out of Bounds

Il processo di inizializzazione di una matrice assegna un limite superiore e un limite inferiore a ogni dimensione.The process of initializing an array assigns an upper bound and a lower bound to each dimension. Tutti gli accessi a un elemento della matrice devono specificare un indice valido, o pedice, per ogni dimensione.Every access to an element of the array must specify a valid index, or subscript, for every dimension. Se un indice è al di sotto del limite inferiore o al di sopra del limite superiore, viene restituito un IndexOutOfRangeException eccezione.If any index is below its lower bound or above its upper bound, an IndexOutOfRangeException exception results. Il compilatore non è in grado di rilevare tale errore, quindi si verifica un errore in fase di esecuzione.The compiler cannot detect such an error, so an error occurs at run time.

Determinazione dei limitiDetermining Bounds

Se un altro componente passa una matrice al codice, ad esempio come argomento di routine, non si conosce la dimensione della matrice o la lunghezza delle relative dimensioni.If another component passes an array to your code, for example as a procedure argument, you do not know the size of that array or the lengths of its dimensions. Prima di provare ad accedere a qualsiasi elemento, è necessario determinare sempre il limite superiore per ogni dimensione di una matrice.You should always determine the upper bound for every dimension of an array before you attempt to access any elements. Se la matrice è stata creata con un mezzo diverso da una clausola Visual Basic New, il limite inferiore potrebbe essere un valore diverso da 0 ed è più sicuro determinare anche tale limite inferiore.If the array has been created by some means other than a Visual Basic New clause, the lower bound might be something other than 0, and it is safest to determine that lower bound as well.

Specifica della dimensioneSpecifying the Dimension

Quando si determinano i limiti di una matrice multidimensionale, prestare attenzione alla modalità di impostazione della dimensione.When determining the bounds of a multidimensional array, take care how you specify the dimension. I parametri di dimension dei metodi GetLowerBound e GetUpperBound sono basati su 0, mentre i parametri Rank delle funzioni Visual Basic LBound e UBound sono basati su 1.The dimension parameters of the GetLowerBound and GetUpperBound methods are 0-based, while the Rank parameters of the Visual Basic LBound and UBound functions are 1-based.

Vedere ancheSee also