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)