ProgrammingジュニアVB.NETプログラマー

Visual Basicにおける配列の正しい構成と初期化は何ですか?動的配列を扱う際の注意点や、使用時のエラーを避ける方法は?

Hintsage AIアシスタントで面接を突破

答え。

Visual Basicでは、配列は同じ型の要素を保存する固定長または可変長の構造体です。動的配列は、初期化やサイズ変更に特に注意が必要です。

問題の歴史

VB6では、固定サイズと可変サイズの静的および動的配列がありました。VB.NETでは、型安全性を持つ任意の型の一元配列、多次元配列、段階配列が完全に実装されています。

問題

よくあるエラーは以下の通りです。

  • 初期化されていない配列へのアクセス
  • 配列の範囲外へのアクセス
  • Preserveなしで動的配列のサイズを変更する際の元のデータの損失

解決策

使用前に常に配列を初期化し、そのサイズを慎重に変更します:

' 宣言 Dim arr() As Integer ' 初期化 ReDim arr(4) ' インデックス 0–4 arr(0) = 1 ' 値を保持しながらサイズを変更 ReDim Preserve arr(6)

主な特徴:

  • 動的配列のサイズ変更にReDimを使用
  • Preserveキーワードはサイズ変更時に古い値を保持します
  • 大きなまたは頻繁に変更されるコレクションには、List(Of T)を使用することが推奨されます。

試験的な質問。

配列を宣言したが初期化を行わなかった場合、どうなりますか?

一元配列の場合、Dim arr() As Integerのように、変数は存在しますが配列自体は確保されません。arr.Lengthにアクセスすると例外が発生します。

多次元配列の両方の次元でサイズを変更するためにReDim Preserveを使用できますか?

いいえ、ReDim Preserveは最後の次元のみを変更することが許可されており、そうでない場合は実行時エラーが発生します。

ReDim Preserveでサイズを増やす際に配列の要素に何が起こりますか?

古い値は保持され、新しい要素にはデフォルト値が設定されます(例えば、Integerの場合は0、参照型の場合はNothing)。

一般的なエラーとアンチパターン

  • 作業前の未初期化配列
  • ループ中の配列範囲外へのアクセス
  • ループ内でのReDim Preserveの頻繁な使用(パフォーマンスの損失)

生活の例

** ネガティブケース

配列が宣言されているが初期化されていない(Dim arr() As Integer)場合、arr.LengthへのアクセスでNullReferenceExceptionが発生します。

長所:

  • 初期化前のメモリ節約

短所:

  • エラーが発生する瞬間を追跡するのが難しい

** ポジティブケース

配列は常にReDimを介して明示的に初期化され、サイズ変更はメインループの外でのみ行い、頻繁に変更されるリストにはList(Of Integer)を使用します。

長所:

  • アクセスエラーが絶対に発生しない
  • 最適なパフォーマンス

短所:

  • 配列のサイズを管理するためにもう少しコードが必要ですし、必要に応じてList(Of T)に移行する必要があります。