ReDim 陳述式 (Visual Basic)

重新配置陣列變數的儲存空間。

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

組件

詞彙

定義

Preserve

選擇項。 修飾詞 (Modifier),在只變更最後一個維度的大小時,用於保留現有陣列中的資料。

name

必要項。 陣列變數的名稱。 請參閱宣告項目名稱 (Visual Basic)

boundlist

必要項。 重新定義之陣列中每個維度的範圍清單。

備註

您可以使用 ReDim 陳述式,變更已宣告之陣列中一個或多個維度的大小。 如果陣列很大,而且不再需要其中的部分元素,則 ReDim 可以藉由減少陣列大小,釋放記憶體。 另一方面,如果程式碼判斷陣列需要更多元素,ReDim 也可以加入元素。

ReDim 陳述式只適用於陣列, 它對於純量 (只包含單一值的變數)、集合或結構是無效的。 請注意,如果您將變數宣告為型別 Array,則 ReDim 陳述式不會有足夠的型別資訊可以建立新陣列。

您只能在程序層次使用 ReDim。 這表示變數的「宣告內容」必須是程序,但不得為原始程式檔 (Source File)、命名空間 (Namespace)、介面、類別 (Class)、結構、模組或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)

規則

  • **修飾詞。**您只能指定 Preserve 修飾詞,而且指定修飾詞時無法省略 ReDim 關鍵字。

  • 多個變數您可以調整同一個宣告陳述式中多個陣列變數的大小,方法是指定每個陣列變數的 name 和 boundlist 部分。 變數之間以逗號 ( , ) 來分隔。

  • 陣列界限boundlist 中的每個項目都可以指定該維度的下限 (Lower Bound) 和上限 (Upper Bound)。 不論您是否指定下限,下限一律為零。 上限則為該註標 (Subscript) 的最高可能值,而非維度的長度 (此為上限加一)。 每個註標的值不同,有可能從零到上限值。

    boundlist 中的維度數目必須符合陣列的原始陣序。

  • 空白陣列您可以使用 -1 宣告陣列維度的上限。 這表示陣列是空白的,但不是 Nothing (Visual Basic)。 如需詳細資訊,請參閱Visual Basic 中的陣列。 但是,Visual Basic 程式碼無法成功存取這類陣列。 如果您嘗試這麼做,在執行期間會發生 IndexOutOfRangeException 錯誤。

  • 資料型別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)

第一個 ReDim 建立的新陣列會取代變數 intArray 中現有的陣列。 ReDim 會將現有陣列的所有元素複製到新陣列。 它還會在每層中的每一資料列結尾處多加入 10 個資料行,並將這些新資料行中的元素初始化為 0 (陣列之元素型別 Integer 的預設值)。

第二個 ReDim 建立另一個新陣列,並複製所有最適的元素。 不過,每層中每一資料列的結尾會遺失五個資料行。 若您已不使用這些資料行,這種情況並不會造成任何問題。 減少大型陣列的大小,可以釋放您不再需要的記憶體。

第三個 ReDim 會再建立另一個新陣列,並從每層中的每一資料列結尾處再移除另外五個資料行。 這一次,它不會複製任何現有的元素。 這會讓陣列還原成原始的大小,並使所有元素回到原始的預設值。

請參閱

參考

Const 陳述式 (Visual Basic)

Dim 陳述式 (Visual Basic)

Erase 陳述式 (Visual Basic)

Nothing (Visual Basic)

IndexOutOfRangeException

概念

Visual Basic 中的陣列