Visual Basicにはデータセットを整理するためのいくつかの方法があります:
標準配列 (Dim arr(10) As Integer): 静的サイズ、インデックスによる高速アクセス、動的に拡張できません。
Collection (オブジェクトコレクション): 動的に拡張可能、任意の型の要素を格納できる(しかし厳密な型付けはなし)、キーとインデックスによるアクセス、For Eachをサポート。
ArrayList (VB.NETで): 旧式のコレクション、Object型のオブジェクトを格納、ジェネリックをサポートしていない(Generic)、型キャストが必要。
List(Of T) (VB.NETで): 型付きコレクション、動的サイズ、高速アクセス、LINQをサポート、データ型に安全。
使用例:
標準配列:
Dim numbers(4) As Integer numbers(0) = 10
Collection:
Dim coll As New Collection() coll.Add("apple") coll.Add(123) For Each item In coll Debug.Print(item) Next
ArrayList:
Dim arrList As New ArrayList() arrList.Add("abc") arrList.Add(123)
List(Of T):
Dim list As New List(Of Integer)() list.Add(10) list.Add(20) For Each num As Integer In list Console.WriteLine(num) Next
ArrayListを使用する際にList(Of T)と比較してどのような主要な問題が発生する可能性がありますか?
回答: ArrayListは要素をObjectとして格納するため、要素にアクセスする際に明示的な型キャストが必要で、実行時にInvalidCastExceptionが発生する可能性が高まります。List(Of T)はコンパイル時に厳密な型検査を提供し、そのようなエラーを排除します。
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' 実行時エラー Dim n As Integer = CType(arrList(0), Integer) ' OK
物語
金融システムでは動的サイズのデータを格納するために標準配列が活発に使用されていました。事前に割り当てたサイズを超えると、配列は「切り捨てられ」てしまい、ピーク時のトランザクションが失われていました。
物語
ArrayListを使用して文字列と数値をコレクションに追加し、その後要素の合計を計算しようとした結果、型キャスト時に例外が発生し、アプリケーションがクラッシュしました。なぜなら、文字列と数値を足し算することはできないからです。
物語
Collectionを注文クラスの保存に使用しましたが、要素の型を確認していませんでした。あるモジュールで誤ってテキストを注文オブジェクトの代わりに追加し、不正なオブジェクトのメソッドを呼び出そうとしたため、ビジネスロジック全体が失敗しました。