vb.net 数组动态定义

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

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

术语

定义

Preserve

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

name

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

boundlist

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

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

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

仅可以在过程级使用 ReDim 这意味着,变量的“声明上下文”必须是过程,而不能是源文件、命名空间、接口、类、结构、模块或块。 有关更多信息,请参见声明上下文和默认访问级别 (Visual Basic)

规则

  • 修饰符。只能指定 Preserve 修饰符,并且,如果这样做,就不能省略 ReDim 关键字。

  • 多个变量。可以在同一声明语句中调整多个数组变量的大小,同时为每个变量指定 nameboundlist 部分。 以逗号分隔多个变量。

  • 数组界限。boundlist 中的各个条目可指定该维度的下限和上限。 无论您是否指定,下限始终是零。 上限是该上标的最大可能值,而不是维度的长度(即上限加 1)。 每个上标都可能在零到其上限值之间变动。

    boundlist 中维度的数量必须与数组的原始秩匹配。

  • 空数组。可以使用 -1 来声明数组维数的上限。 这表示数组为空,但不是 Nothing (Visual Basic) 有关更多信息,请参见 数组 (Visual Basic) 然而,Visual Basic 代码不能成功访问此类数组。 如果尝试这样做,则在执行期间会发生 IndexOutOfRangeException 错误。

  • 数据类型。ReDim 语句无法更改数组变量或其元素的数据类型。

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

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

  • 使用 Preserve 调整大小。如果使用 Preserve,则只能调整数组最后一个维度的大小,对于其他每个维度,您必须指定它在现有数组中已经具有的相同界限。

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

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

行为

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

  • 不使用 Preserve 初始化。如果未指定 PreserveReDim 会将新数组的元素初始化为它们数据类型的默认值。

  • 使用 Preserve 初始化。如果指定 Preserve 修饰符,Visual Basic 会将这些元素从现有数组复制到新数组。

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

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


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

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

第三个 ReDim 仍然创建另一个新数组,同时从每一层中每个行的结尾移除另外 5 列。 这一次它不会复制任何现有元素。 这样即会将数组恢复为其原始大小,并将它的所有元素还原为它们的原始默认值。

你可能感兴趣的:(VB.NET)