Solucionar problemas de matrices (Visual Basic)Troubleshooting Arrays (Visual Basic)

En esta página se enumeran algunos problemas comunes que pueden producirse al trabajar con matrices.This page lists some common problems that can occur when working with arrays.

Errores de compilación que declaran e inicializan una matrizCompilation Errors Declaring and Initializing an Array

Pueden surgir errores de compilación debido a la incomprensión de las reglas para declarar, crear e inicializar matrices.Compilation errors can arise from misunderstanding of the rules for declaring, creating, and initializing arrays. Las causas más comunes de los errores son las siguientes:The most common causes of errors are the following:

  • Proporcionar una nueva cláusula Operator después de especificar la longitud de la dimensión en la declaración de la variable de matriz.Supplying a New Operator clause after specifying dimension lengths in the array variable declaration. En las líneas de código siguientes se muestran declaraciones no válidas de este 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()()

  • Especificar longitudes de dimensión para más que la matriz de nivel superior de una matriz escalonada.Specifying dimension lengths for more than the top-level array of a jagged array. En la línea de código siguiente se muestra una declaración no válida de este tipo.The following code line shows an invalid declaration of this type.

    Dim INVALIDjaggedByteArray(1)(1) As Byte

  • Omitir la palabra clave New al especificar los valores de los elementos.Omitting the New keyword when specifying the element values. En la línea de código siguiente se muestra una declaración no válida de este tipo.The following code line shows an invalid declaration of this type.

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

  • Proporcionar una cláusula New sin llaves ({}).Supplying a New clause without braces ({}). En las líneas de código siguientes se muestran declaraciones no válidas de este 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)

Acceder a una matriz fuera de los límitesAccessing an Array Out of Bounds

El proceso de inicialización de una matriz asigna un límite superior y un límite inferior a cada dimensión.The process of initializing an array assigns an upper bound and a lower bound to each dimension. Cada acceso a un elemento de la matriz debe especificar un índice válido, o subíndice, para cada dimensión.Every access to an element of the array must specify a valid index, or subscript, for every dimension. Si un índice está por debajo de su límite inferior o por encima de su límite superior, se produce una excepción IndexOutOfRangeException.If any index is below its lower bound or above its upper bound, an IndexOutOfRangeException exception results. El compilador no puede detectar este tipo de error, por lo que se produce un error en tiempo de ejecución.The compiler cannot detect such an error, so an error occurs at run time.

Determinar los límitesDetermining Bounds

Si otro componente pasa una matriz al código (por ejemplo, como un argumento de procedimiento), no se conoce el tamaño de la matriz o las longitudes de sus dimensiones.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. Siempre debe determinar el límite superior de cada dimensión de una matriz antes de intentar tener acceso a los elementos.You should always determine the upper bound for every dimension of an array before you attempt to access any elements. Si la matriz se ha creado por algunos medios distintos de una Visual Basic New cláusula, el límite inferior podría ser distinto de 0 y es más seguro determinar también ese límite inferior.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.

Especificar la dimensiónSpecifying the Dimension

Al determinar los límites de una matriz multidimensional, tenga cuidado al especificar la dimensión.When determining the bounds of a multidimensional array, take care how you specify the dimension. Los dimension parámetros de los métodos GetLowerBound y GetUpperBound se basan en 0, mientras que los parámetros Rank de las funciones Visual Basic LBound y UBound se basan en 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.

Vea tambiénSee also