数组疑难解答
更新:2007 年 11 月
本页列出了使用数组过程中出现的一些常见问题。
声明和初始化数组时的编译错误
如果错误理解用于声明、创建和初始化数组的规则,将产生编译错误。下面列出了最常见的错误原因:
在声明数组变量时,在指定维长度后提供了 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 BasicNew 子句创建的,则下限可能不是 0,因此,最好也同时确定其下限。
指定维度
在确定多维数组的界限时,请注意维度的指定方式。GetLowerBound 和 GetUpperBound 方法的 dimension 参数是从 0 开始的,而 Visual BasicLBound 函数 (Visual Basic) 和 UBound 函数 (Visual Basic) 方法的 Rank 参数是从 1 开始的。