.NET の IEnumerable と、IEnumerator。

http://garicchi.hatenablog.jp/entry/2014/09/12/200000
IEnumerator は、イテレーター。Currentプロパティ、MoveNextメソッドを持ち、終了までループするための動作を提供してくれる。
IEnumerable は、IEnumerator を戻すメソッドを実装するためのインターフェース。foreachはコレクションがIEnumerableを実装していることを前提に動作する。
IEnumerator は生で使うことはまず無い。IEnumerable の実装のときに戻り値の型として見えるくらいである。



ちなみに foreach は、内部的には以下のように展開されてコンパイルされる。

IEnumerator enumerator = collection.GetEnumerator();
while (enumerator.MoveNext())
{
var item = enumerator.Current;

// ブロック内の処理

}