数组疑难解答 (Visual Basic)

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

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

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

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

    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 子句创建的,则下限可能不是 0,并且确定该下限也是最 New 安全的。

指定维度

确定多维数组边界时,请注意如何指定维度。 dimension和 方法 GetLowerBound 的参数基于 0,而 Visual Basic 和 函数的参数 GetUpperBound Rank 基于 LBound UBound 1。

请参阅