Solucionar problemas de matrices (Visual Basic)
En esta página se indican algunos problemas comunes que pueden producirse al trabajar con matrices.
Errores de compilación al declarar e inicializar una matriz
Los errores de compilación pueden surgir de un mal entendimiento de las reglas para declarar, crear e inicializar matrices. Las causas más comunes de los errores son las siguientes:
Proporcionar una cláusula New Operator después de especificar longitudes de dimensión en la declaración de variable de la matriz. Las líneas de código siguientes muestran declaraciones no válidas de este tipo.
Dim INVALIDsingleDimByteArray(2) As Byte = New Byte()
Dim INVALIDtwoDimShortArray(1, 1) As Short = New Short(,)
Dim INVALIDjaggedByteArray(1)() As Byte = New Byte()()
Especificar longitudes de dimensión para más que la matriz de nivel superior de una matriz escalonada. La línea de código siguiente muestra una declaración no válida de este tipo.
Dim INVALIDjaggedByteArray(1)(1) As Byte
Omitir la palabra clave
New
al especificar los valores del elemento. La línea de código siguiente muestra una declaración no válida de este tipo.Dim INVALIDoneDimShortArray() As Short = Short() {0, 1, 2, 3}
Proporcionar una cláusula
New
sin llaves ({}
). Las líneas de código siguientes muestran declaraciones no válidas de este 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)
Acceso a una matriz fuera de límites
El proceso de inicialización de una matriz asigna un límite superior y un límite inferior a cada dimensión. Cada acceso a un elemento de la matriz debe especificar un índice válido, o subíndice, para cada dimensión. Si algún índice está por debajo de su límite inferior o por encima de su límite superior, se produce una excepción IndexOutOfRangeException. El compilador no puede detectar este tipo de error, por lo que se produce un error en tiempo de ejecución.
Determinación de límites
Si otro componente pasa una matriz al código, por ejemplo, como argumento de procedimiento, no conoce el tamaño de esa matriz o las longitudes de sus dimensiones. Siempre debe determinar el límite superior de cada dimensión de una matriz antes de intentar acceder a los elementos. Si la matriz se ha creado por algún medio que no sea una cláusula New
de Visual Basic, el límite inferior puede ser algo distinto de 0, y es más seguro determinar también ese límite inferior.
Especificación de la dimensión
Al determinar los límites de una matriz multidimensional, tenga cuidado al especificar la dimensión. Los parámetros dimension
de los métodos GetLowerBound y GetUpperBound se basan en 0, mientras que los parámetros Rank
de las funciones LBound y UBound de Visual Basic se basan en 1.