Visual Basicのコレクションは、変数にオブジェクトや値のグループを保存するために必要です。Collection、ArrayList、およびジェネリックなList(Of T)などの標準コレクションは、要素のアクセス、追加、および削除のためのさまざまなメソッドを提供し、型安全性、パフォーマンス、および機能によって異なります。
古典的なVB6には、型付けされたコレクションCollectionのみがありました。.NETでは、ArrayList(厳密な型付けのない古い汎用型)や、.NET 2.0で登場したList(Of T)のような現代的なジェネリックコレクションを含む、より強力な構造が登場しました。
主な課題は、プロジェクトのタスクに適したコレクションを選択することです。厳密な型付けのないコレクション(ArrayList、Collection)は、実行時エラーやパフォーマンスの問題を引き起こす可能性があります。ジェネリックコレクションはパラメータ化を必要としますが、型の操作において最大の安全性と便利さを提供します。
古いコレクションCollectionは古いコードとやりとりするためだけに使用し、新しいプロジェクトにはList(Of T)を優先することをお勧めします。ArrayListは、要素の型が不明な場合にのみ役立ちますが、その場合はList(Of Object)や他のジェネリックコレクションを使用する方が良いです。
コードの例:
' Collection Dim coll As New Collection() coll.Add("Hello") coll.Add(123) ' ArrayList Dim arr As New ArrayList() arr.Add("World") arr.Add(456) ' List(Of T) Dim list As New List(Of Integer)() list.Add(789) list.Add(101112)
主な特徴:
Collectionと配列はVisual Basicで何が異なるのか?
配列は初期化時にサイズが固定され、同じ型の要素を保存し、インデックスでの高速アクセスをサポートします。Collectionは動的に増加し、異なる型のオブジェクトを保存でき、キーでのアクセスをサポートします(ただし、VB6ではインデックスされません)。
Collectionにすでに存在するキーでオブジェクトを追加しようとするとどうなるか?
既存のキーで要素を追加しようとすると、「コレクションにすでにそのキーが存在します」という実行時エラーが発生します。
Dim c As New Collection() c.Add("one", "a") c.Add("two", "a") ' エラー
ArrayListをList(Of T)に通常の方法でキャストすることはできるか?
いいえ、通常のキャストは不可能で、新しいList(Of T)を手動で作成して適切な要素をコピーする必要があります。そうしないと、ArrayListの厳密な型付けのために実行時エラーが発生します。
クライアントを保存するプロジェクトでArrayListが使用されており、Clientオブジェクトの代わりに誤って文字列が追加される。処理中に型のキャストエラーが発生し、追跡が困難である。
利点:
欠点:
厳密に型付けされたList(Of Client)が使用され、すべてのコードがStrict Onオプションでコンパイルされる。エラーはコンパイル時に発見され、構造は新しいLINQメソッドで簡単に拡張できる。
利点:
欠点: