数组疑难解答 (Visual Basic)

本页列出了在使用数组时可能出现的一些常见问题。

声明和初始化数组时出现编译错误

编译错误可能源于对声明、创建和初始化数组的规则的误解。 最常见的错误原因如下:

  • 在数组变量声明中指定维度长度后提供 New 运算符子句。 下面的代码行显示了此类型的无效声明。

    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,最安全的做法是也确定该下限。

指定维度

确定多维数组的边界时,请注意指定维度的方式。 GetLowerBoundGetUpperBound 方法的 dimension 参数是从 0 开始的,而 Visual Basic LBoundUBound 函数的 Rank 参数是从 1 开始的。

请参阅