配列のトラブルシューティング
更新 : 2007 年 11 月
ここでは、配列を使用する際に起きる一般的な問題についていくつか説明します。
配列の宣言と初期化に関するコンパイル エラー
配列の宣言、作成、初期化に関する規則をよく理解していないと、コンパイル エラーが発生します。代表的なエラーの原因を次に示します。
配列変数の宣言の中で次元のサイズを指定した後に 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()()
ジャグ配列のトップ レベル配列よりも大きい次元サイズを指定している。この種の無効な宣言の例を次に示します。
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)
配列の範囲外へのアクセス
配列の初期化プロセスでは、配列の各次元に上限と下限を割り当てます。配列の要素にアクセスするときには、それぞれの次元について有効なインデックスまたは添字を指定する必要があります。指定したインデックスが下限より小さいか、上限より大きい場合は、IndexOutOfRangeException 例外が発生します。コンパイラはこのようなエラーを検出できないので、実行時にエラーが発生します。
範囲の確認
別のコンポーネントからプロシージャ引数などの形でコードに配列が渡される場合は、その配列のサイズや各次元のサイズはわかりません。配列内の要素にアクセスするときには、事前に配列の各次元の上限を調べる必要があります。配列が Visual Basic の New 句以外の方法で作成されている場合は、下限が 0 でない可能性もあるので、下限も調べておいた方が安全です。
次元の指定
多次元配列の範囲を調べるときには、次元の指定方法に注意してください。GetLowerBound メソッドおよび GetUpperBound メソッドの dimension パラメータは 0 から始まりますが、Visual Basic の LBound 関数 (Visual Basic) および UBound 関数 (Visual Basic) の Rank パラメータは 1 から始まります。