読み方 : アイイニューメラブル
IEnumerable
IEnumerableとは?

このインターフェースが持つメソッドは GetEnumerator() ただ一つである。このメソッドはIEnumerator型のオブジェクトを返し、呼び出し元はそれを通じてコレクションの要素を先頭から末尾へ向けて順に取り出せる。IEnumerator は MoveNext() と Current および Reset() という3つのメンバーを持ち、現在位置の管理と要素の取得を担う。
C#のforeach文は、内部で GetEnumerator() を呼び出し、MoveNext() がfalseを返すまで Current を読み取り続けるという動作を行う。IEnumerableを実装したクラスであれば、配列やリスト、辞書など種類を問わずforeachで統一的に処理できる。
型引数を持つジェネリック版の IEnumerable<T> (System.Collections.Generic名前空間)も広く使われる。Tに具体的な型を指定することで、要素の取り出しにキャストが不要になり、型安全性が高まる。LINQのメソッド群はこの IEnumerable<T> を前提として設計されており、Where() や Select() などの操作はこのインターフェースを実装するあらゆるコレクションに対して適用できる。
独自クラスにIEnumerableを実装する場合は、GetEnumerator() メソッドを記述し、対応する IEnumerator も用意する必要がある。yield return構文を使えば、IEnumerator を明示的に実装せずとも、コンパイラが自動的に状態管理のコードを生成する。これにより、カスタムコレクションをforeach対応にする実装が容易になる。