本页列出了使用数组过程中出现的一些常见问题。
声明和初始化数组时的编译错误
如果错误理解用于声明、创建和初始化数组的规则,将产生编译错误。 下面列出了最常见的错误原因:
- 在声明数组变量时,在指定维长度后提供了 New 运算符 (Visual Basic) 子句。 以下代码行显示了此类型的无效声明。 - Dim INVALIDsingleDimByteArray(2) As Byte = New Byte() - Dim INVALIDtwoDimShortArray(1, 1) As Short = New Short(,) - Dim INVALIDjaggedByteArray(1)() As Byte = New Byte()() 
- 指定的维长度超过了交错数组的顶级数组。 以下代码行显示了此类型的无效声明。 - Dim INVALIDjaggedByteArray(1)(1) As Byte 
- 在指定元素值时遗漏了 New 关键字。 以下代码行显示了此类型的无效声明。 - Dim INVALIDoneDimShortArray() As Short = Short() {0, 1, 2, 3} 
- 提供 New 子句时没有使用括号 ({})。 以下代码行显示了此类型的无效声明。 - 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) 
访问的数组超出界限
在初始化数组的过程中,将为每一维指定一个上限和一个下限。 每次访问数组元素时,都必须为每一维指定一个有效的索引或下标。 如果任何索引低于其下限或高于其上限,将引发 IndexOutOfRangeException 异常。 编译器无法检测到这种错误,因而在运行时将发生错误。
确定界限
如果其他组件向您的代码中传递数组(如作为过程参数),您将不清楚该数组的大小或其维长度。 此时,您应首先确定数组每一维的上限,然后再尝试访问任何数组元素。 如果数组不是使用 Visual Basic New 子句创建的,则下限可能不是 0,因此,最好也同时确定其下限。
指定维度
在确定多维数组的界限时,请注意维度的指定方式。 GetLowerBound 和 GetUpperBound 方法的 dimension 参数是从 0 开始的,而 Visual Basic LBound 和 UBound 函数的 Rank 参数是从 1 开始的。