ここでは非ジェネリックなコレクション型System.Collections.ArrayListクラスについて解説します。 ArrayListクラスを使用するよりも、ArrayListに相当するジェネリックなコレクション型System.Collections.Generic.List<T>クラスを使用することを強く推奨します。
ArrayList
System.Collections.ArrayListクラスは配列に非常によく似たクラスですが、要素の数が固定である配列とは異なり動的に要素の数を増減できるという特徴を持っています。
基本的な操作
早速、ArrayListを使った基本的な操作について見ていきます。 次のコードは、ArrayListクラスを使った例です。
この例を見てわかるように、ArrayListでは要素の数は可変であるため、任意の数の要素を追加・削除・挿入することが出来ます。 要素の追加・削除・挿入にはAdd, AddRange, Remove, RemoveAt, RemoveRange, Insertなどのメソッドを使います。 Removeメソッドは指定された要素をArrayListから削除するのに対し、RemoveAtメソッドは指定されたインデックスにある要素を削除します。 Clearメソッドによって、コレクション内の全ての要素を削除することも出来ます。 現在の要素の数を取得するには、Lengthプロパティではなく、Countプロパティを参照します。
また、配列と同様に、インデックスを指定して特定の要素を取得・設定することも出来ます。 C#ではインデクサによって、VB.NETでは既定のプロパティItemによって、配列と同様のインデックスによる取得・設定ができるようになっています。
この例ではint型を代入していますが、ArrayListではint型ではなくobject型で要素を格納するので、どのような型でもArrayListに追加することができます。 次の例では、一つのArrayListに様々な型の要素を追加しています。
列挙操作
ArrayListでも、配列と同様for文による列挙と、foreach文による列挙ができるようになっています。 次の例では、ArrayListをfor文とforeach文で列挙しています。
配列からの変換
配列からArrayListに変換するには、コンストラクタかAddRangeメソッドが使えます。 既に説明したとおり、配列の型によらずArrayListに変換することができます。
配列への変換・コピー
ArrayListから配列へ変換する場合にはToArrayメソッドやCopyToメソッドが使えます。 ただしArrayListへの変換とは逆に、配列のコピー時にはコピー先となる配列の型に注意する必要があります。 コピーしようとする要素とコピー先の配列の型が異なる(キャスト出来ない)場合はInvalidCastExceptionがスローされます。
ToArrayメソッドで型を指定しなければobjectの配列へ変換することが出来ます。 この場合、InvalidCastExceptionはスローされません。