疑難排解陣列 (Visual Basic)

本頁面會列出一些使用陣列時所發生的常見問題。

宣告和初始化陣列時發生編譯錯誤

編譯錯誤是因為不了解宣告、建立和初始化陣列的規則所引起。 最常見的錯誤原因如下:

  • 在陣列變數宣告中指定維度 (Dimension) 長度之後,才提供 New 運算子 (Visual Basic) 子句。 下列程式碼行會顯示這種類型的無效宣告。

    Dim INVALIDsingleDimByteArray(2) As Byte = New Byte()

    Dim INVALIDtwoDimShortArray(1, 1) As Short = New Short(,)

    Dim INVALIDjaggedByteArray(1)() As Byte = New Byte()()

  • 對不規則陣列 (Jagged Array) 的多個最上層陣列指定維度長度。 下列程式碼行會顯示這種類型的無效宣告。

    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)

存取超出界限的陣列

初始化陣列的處理序會指定每個維度的上限 (Upper Bound) 和下限。 陣列項目的每個存取權限都必須對每個維度指定有效的索引或註標 (Subscript)。 如果索引低於它的下限或高於它的上限,則會產生 IndexOutOfRangeException 例外狀況。 編譯器 (Compiler) 無法偵測到這種錯誤,因此會在執行階段發生錯誤。

決定界限

例如,如果其他元件將陣列傳遞至程式碼做為程序引數,則您不會知道該陣列的大小或它的維度長度。 在嘗試存取任何項目之前,一定要先判斷每個陣列維度的上限。 如果已使用 Visual Basic New 子句以外的方法建立陣列,下限可能是 0 以外的值,這也是決定該下限最安全的值。

指定維度

判斷多維陣列的界限時,請特別注意指定維度的方法。 GetLowerBoundGetUpperBound 方法的 dimension 參數是以零起始,而 Visual Basic LBoundUBound 函式的 Rank 參數則是以 1 起始。

請參閱

工作

HOW TO:在 Visual Basic 中初始化陣列變數

概念

Visual Basic 中的陣列