次の方法で共有


配列のトラブルシューティング (Visual Basic)

ここでは、配列を使用しているときに発生する可能性のある一般的な問題について説明します。

配列の宣言と初期化のコンパイル エラー

コンパイル エラーは、配列の宣言、作成、および初期化に関する規則の解釈の誤りが原因で発生する可能性があります。 エラーの最も一般的な原因は次のとおりです。

  • 配列変数宣言で、次元の長さを指定した後に new 演算子句を指定した。 次のコード行は、この型の無効な宣言を示しています。

    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 関数と UBound 関数の Rank パラメーターは 1 から始まります。

関連項目