最終更新:2008-08-11 (月) 22:43:36 (5736d)  

イテレータ
Top / イテレータ

繰り返し処理

C♯ の foreach 構文は、コレクションクラスの利用者側から見ると非常に便利な機能です。 しかしながら、実装側から見た場合、IEnumerableやIEnumeratorインタフェースを実装する必要があり、結構面倒な作業が必要でした。

この実装側の労力を軽減するために、C# 2.0ではイテレータ構文というものが追加されました。 イテレータ構文は、コレクションクラスから要素を得る(yield: 産出する、利益を生む)ための構文で、以下のような書き方をします。

using System.Collections.Generic;
public class Stack<T>: IEnumerable<T>
{
  T[] items;
  int count;
  public void Push(T data) {...}
  public T Pop() {...}
  public IEnumerator<T> GetEnumerator()
  {
    for(int i = count - 1; i >= 0; --i)
      yield return items[i];
  }
}

//呼び出し
Stack<int> stack = new Stack<int>();
for (int i = 0; i < 10; i++) stack.Push(i);
foreach (int i in stack) Console.Write("{0} ", i);