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.

Confira também