Solucionando problemas de matrizes (Visual Basic)
Esta página lista alguns problemas comuns que podem ocorrer ao trabalhar com matrizes.
Erros de Compilação Declarando e Inicializando uma Matriz
Erros de compilação podem surgir de um mal-entendido das regras para declarar, criar e inicializar matrizes. As causas mais comuns de erros são as seguintes:
Fornecer uma cláusula New Operator depois de especificar comprimentos de dimensão na declaração de variável de matriz. As linhas de código a seguir mostram declarações inválidas desse tipo.
Dim INVALIDsingleDimByteArray(2) As Byte = New Byte()
Dim INVALIDtwoDimShortArray(1, 1) As Short = New Short(,)
Dim INVALIDjaggedByteArray(1)() As Byte = New Byte()()
Especificar comprimentos de dimensão para mais do que a matriz de nível superior de uma matriz denteada. A linha de código a seguir mostra uma declaração inválida desse tipo.
Dim INVALIDjaggedByteArray(1)(1) As Byte
Omitir a palavra-chave
New
ao especificar os valores do elemento. A linha de código a seguir mostra uma declaração inválida desse tipo.Dim INVALIDoneDimShortArray() As Short = Short() {0, 1, 2, 3}
Fornecer uma cláusula
New
sem chaves ({}
). As linhas de código a seguir mostram declarações inválidas desse tipo.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)
Acessando uma Matriz Fora dos Limites
O processo de inicialização de uma matriz atribui um limite superior e um limite inferior a cada dimensão. Cada acesso a um elemento da matriz precisa especificar um índice ou subscrito válido, para cada dimensão. Se qualquer índice estiver abaixo de limite inferior ou acima do limite superior, uma exceção IndexOutOfRangeException será o resultado. O compilador não pode detectar esse erro, portanto, ocorre um erro em tempo de execução.
Determinando Limites
Se outro componente passar uma matriz para o código, por exemplo, como um argumento de procedimento, você não saberá o tamanho dessa matriz ou os comprimentos de suas dimensões. Você sempre deve determinar o limite superior para cada dimensão de uma matriz antes de tentar acessar qualquer elemento. Se a matriz tiver sido criada por alguns meios diferentes de uma cláusula New
do Visual Basic, o limite inferior poderá ser algo diferente de 0 e é mais seguro determinar esse limite inferior também.
Especificando a Dimensão
Ao determinar os limites de uma matriz multidimensional, tome cuidado ao especificar a dimensão. Os parâmetros dimension
dos métodos GetLowerBound e GetUpperBound são baseados em 0, enquanto os parâmetros Rank
das funções LBound e UBound do Visual Basic são baseados em 1.