参考
このページの目次
IEnumerator インターフェースについての理解を深めるための資料集め。
IEnumerable<T> の理解の土台となる知識の習得を目的とする。
IEnumerator インターフェイス (System.Collections) http://msdn.microsoft.com/ja-jp/library/system.collections.ienumerator(v=vs.110).aspx
次のメソッドが必要
実際に実装する際は、例えば、以下の定義を使う。
private object[] _list; //返り値を格納 private int _index; //現在の位置
namespace BasicControlFlow { class myEnumerator:IEnumerator { public int[] value; public int index; public myEnumerator() { index = -1; // -1にするのがポイント value = new int[5]; value[0] = 10; value[1] = 20; value[2] = 30; value[3] = 40; value[4] = 50; } public bool MoveNext() { index++; return (index < value.Length); } public void Reset() { index = -1; // -1にするのがポイント } public object Current { get { return value[index]; } } } }
引用元:[C#] IEnumeratorインターフェイスを実装しforeachに対応したクラスを作成する http://www.ipentec.com/document/document.aspx?page=csharp-inplement-IEnumerator-IEnumerable
以上のように、コレクションクラスを作るには、
そのクラス自身に、IEnumerableを実装するとともに、
そのクラス内部のコレクションに対応するIEnumeratorを実装する必要がある。
しかしながら、IEnumeratorの実装は少々めんどくさい。
ということで、楽するため、C#2.0からyieldが追加された。
続いては、Coding/.NET/標準ライブラリ/IEnumerator_yieldについて。