Visual Basic におけるコレクション

更新 : 2007 年 11 月

一般に、コレクションという用語は、関連するオブジェクトのグループ化および管理に使用するオブジェクトを指します。たとえば、どの Form にもコントロールのコレクションがあります。このコレクションにアクセスするには、フォームの Controls プロパティを使用します。このコレクションは、フォーム上のすべてのコントロールを表すオブジェクトです。コレクション内のコントロールをインデックスを使って取得したり、For Each...Next ステートメント (Visual Basic) を使ってコレクションの要素をループしたりできます。

ただし、コレクションにはいくつかの種類があり、さまざまな点で異なります。

コレクションの種類

Visual Basic には、Collection クラスも用意されています。このクラスは、独自のコレクションを定義し、作成するために使用できます。Collection クラスにも、フォームの Controls コレクションと同じように、For Each...Next を使って要素をループしたりインデックスで要素を取得したりするための組み込み機能が用意されています。詳細については、「Collection オブジェクト (Visual Basic)」を参照してください。

ただし、これらの 2 つの種類のコレクションは相互運用できません。たとえば、次のコードはコンパイラ エラーになります。

Dim localControls As Collection

' The following line generates a COMPILER ERROR.

localControls = Me.Controls()

Controls コレクションは .NET Framework コレクションですが、変数 localControls は Visual Basic のCollectionなので、これらのコレクションに互換性はありません。これらの 2 種類のコレクションは、異なるクラスから実装されます。両者のメソッドは似ていますが同一ではありません。インデックスの方式も異なります。

インデックス番号が 0 から始まるコレクションと 1 から始まるコレクション

コレクションには、項目のインデックス番号が 0 から始まるコレクションと 1 から始まるコレクションがあります。0 から始まるコレクションではコレクション内の最初の項目を指すインデックスは 0 で、1 から始まるコレクションでは 1 です。前記の .NET Framework の Controls コレクションは、0 から始まるコレクションの例です。Visual Basic の Collection オブジェクトは、1 から始まるコレクションの例です。

1 から始まるコレクションは、インデックスの範囲が 1 ~ Count プロパティ (Collection オブジェクト) (コレクション内の項目数を返すプロパティ) であるため、Visual Basic ユーザーはより直感的に使用できます。一方、インデックス番号が 0 から始まるコレクションの範囲は、0 ~ (Count プロパティの値から 1 を引いた値) です。この方式は、インデックス値が基本値からのオフセットである場合や、0 から始まる列挙のメンバに相当する場合に適切です。

.NET Framework コレクションのインデックスが 0 から始まるのは、標準化のためです。Visual Basic の Collection クラスのインデックスが 1 から始まるのは、旧バージョンとの互換性維持のためです。

インデックスおよびキー値

Visual Basic の Collection クラスのインスタンスでは、数値インデックスまたは String キーを使って項目にアクセスできます。キーを指定してもしなくても、項目を Visual Basic の Collection オブジェクトに追加できます。キーを使わずに項目を追加した場合は、その項目にアクセスするときに数値インデックスを使う必要があります。

一方、一部のコレクション (System.Collections.ArrayList など) では、数値インデックスだけを使用できます。キーを格納した String 配列などに基づいて独自の対応付けを作成しない限り、このようなコレクションの要素にキーを関連付けることはできません。

項目の追加と削除

コレクションには項目を追加できるものとできないものがあり、項目を追加できるコレクションの間でもその方法に違いがあります。Visual Basic の Collection オブジェクトは、汎用プログラミング ツールなので、他のコレクションに比べて柔軟性に富んでいます。項目をコレクションに追加する Add メソッド (Collection オブジェクト) や、項目をコレクションから削除する Remove メソッド (Collection オブジェクト) があります。

一方、特定の目的で使用されるコレクションでは、コードを使って要素を追加したり削除したりすることはできません。たとえば、CheckedListBox.CheckedItems プロパティは、項目への参照をインデックスで返しますが、コードでコレクションの項目を追加したり削除したりすることはできません。そのような操作は、ユーザー インターフェイスの該当するチェック ボックスをオンまたはオフにすることにより、ユーザーだけが実行できます。したがって、このコレクションには Add メソッドも Remove メソッドもありません。

参照

処理手順

方法 : オブジェクトのコレクションを作成する

方法 : オブジェクトの配列を作成する

方法 : コレクションの項目を追加、削除、および取得する

方法 : クラス内にコレクションを定義する

方法 : Visual Basic でコレクションを反復処理する

コレクションのトラブルシューティング

概念

オブジェクトのグループの管理

Visual Basic のコレクション クラス

コレクションによるオブジェクトの管理