【C#】IEnumerable

IEnumerableインタフェース

非ジェネリックコレクション(System.Collections)に対する単純な反復処理をサポートする列挙子を公開する。
IEnumeratorインタフェースを返す抽象メソッドGetEnumerator()を持つ。

IEnumeratorインタフェース

反復処理をサポートする、状況に応じて配列を動的に制御するインタフェース。
以下の関数とプロパティを持つ。
bool MoveNext() イテレータを次に進ませる
void Reset() イテレータを初期位置に戻す
void Dispose() アンマネージリソースの解放
object Current 現在のイテレータ
代表的な反復処理:foreach文
コレクションのすべての要素を一回ずつ読み出すことが出来る

foreach (T 変数 in コレクション)
{
    処理;
}
上記は糖衣構文で、コンパイラによって以下のように展開される。

try
{
    IEnumerator e = array.GetEnumerator();
    while(e.MoveNext()){
        T 変数名 = (T)e.Current;
        処理;
    }
}
finally
{
    Dispose処理;
}