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

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

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

コレクションの種類

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

ただし、これらの 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 であることを意味し、後者は 1 であることを意味します。 インデックス番号が 0 から始まるコレクションの例として、前に説明した .NET Framework の Controls コレクションがあります。 Visual Basic の Collection オブジェクトは、インデックス番号が 1 から始まるコレクションの例です。

インデックス番号が 1 から始まるコレクションは、インデックスの範囲が 1 ~ Count プロパティ (コレクション内の項目数を返すプロパティ) であるため、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 メソッドや、項目をコレクションから削除する Remove メソッドがあります。

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

参照

処理手順

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

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

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

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

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

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

概念

コレクション初期化子の概要 (Visual Basic)

オブジェクトのグループの管理 (Visual Basic)

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

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