ReDim 语句 (Visual Basic)

为数组变量重新分配存储空间。

ReDim [ Preserve ] name(boundlist) [ ,  name(boundlist) [, ... ] ]

部件

术语

定义

Preserve

可选。 修饰符,当仅更改最后一个维度的大小时,用来保留现有数组中的数据。

name

必需。 数组变量的名称。 请参见 已声明的元素名称 (Visual Basic)

boundlist

必需。 列出重新定义的数组各个维度的界限。

备注

可以使用 ReDim 语句来更改某个已声明数组的一个或多个维度的大小。 如果有一个较大的数组,并且您不再需要它的某些元素,ReDim 可通过减小数组大小来释放内存。 另一方面,因此,如果您的数组需要多个元素,ReDim 可以添加它们。

ReDim 语句仅适用于数组。 它是无效的。只包含单个值) 的标量 (变量,集合或结构。 请注意,如果将变量声明为类型 Array,ReDim 语句没有足够的类型创建的信息的新数组。

仅可以在过程级使用 ReDim。 因此,该变量的声明上下文必须是程序;它不能为源文件、命名空间、接口、选件类、结构、模块或块中。 有关更多信息,请参见声明上下文和默认访问级别 (Visual Basic)

规则

  • **多个变量。**可以调整在同一声明语句的几个数组变量并对每个变量指定 name 和 boundlist 部件。 以逗号分隔多个变量。

  • **数组界限。**boundlist 中的各个条目可指定该维度的下限和上限。 下限始终为 0 (0)。 该上限为该维的,是上限和一个) 不是该长度最大索引值 (维度。 每个维的索引能从 0 更改通过其上限值。

    中的维数。boundlist 的必须与维度 (级别) 的原始的数组。

  • **数据类型。**ReDim 语句不能更改数组变量或元素的数据类型。

  • **初始化。**ReDim 语句无法为数组元素提供新的初始化值。

  • **秩。**ReDim 语句无法更改数组的秩(维数)。

  • **使用 Preserve 调整大小。**如果使用 Preserve,可以调整数组的修改的维度。 对于其他维度,必须指定为现有数组的界限。

    例如,如果数组只有一维,而可以调整该维度的大小并依然保留数组的所有内容,因为您更改的是最后一个并且唯一的维度。 然而,如果数组具有两个或多个维度,则如果使用 Preserve 将仅可以更改最后维度的大小。

  • **属性。**可以在容纳值数组的属性上使用 ReDim。

行为

  • **数组替换。**ReDim 释放现有数组并且创建具有相同秩的新数组。 新数组将替换数组变量中已释放的数组。

  • **不使用 Preserve 初始化。**如果未指定 Preserve,使用其数据类型的默认值,ReDim 初始化新数组的元素。

  • **使用 Preserve 初始化。**如果指定 Preserve,Visual Basic 复制从现有数组的元素到新数组。

示例

下面的示例将增加某个动态数组最后一个维度的大小(不会丢失数组中的任何现有数据),然后减小该大小(会有部分数据丢失)。 最后,它会将大小重新减小到其原始值,并重新初始化所有数组元素。

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

Dim 语句用三维创建新数组。 每个维度声明区域 10,因此,每个维度的数组索引可能范围为从 0 到 10。 以下讨论中,三维引用层、行和列。

第一个 ReDim 创建一个新数组,以替换变量 intArray 中的现有数组。 ReDim 将所有元素从现有数组复制到新数组中。 它还再添加 10 列。每行的结尾。每层的并初始化这些新列的元素到 0 ( Integer的默认值,是数组的元素类型)。

第二 ReDim 创建一个新数组并复制适当的所有元素。 然而,每一层的每一行的结尾丢失了 5 列。 如果不再使用这些栏,丢失将不成问题。 减小大型数组的大小能够释放不再需要的内存。

第三 ReDim 创建一个新数组并从每行的结尾。每层的删除额外五列。 这一次它不会复制任何现有元素。 此语句将该数组传递给其原始大小。 由于语句不包括 Preserve 修饰符,它将所有数组元素到其原始默认值。

有关其他示例,请参见数组 (Visual Basic)

请参见

参考

Const 语句 (Visual Basic)

Dim 语句 (Visual Basic)

Erase 语句 (Visual Basic)

Nothing (Visual Basic)

IndexOutOfRangeException

其他资源

数组 (Visual Basic)