NETシーケンサ

2235 ワード

  • ローズマリー
  •      ディケンサは方法、getアクセスまたは演算子であり、IEnumerableインターフェース全体を実現する必要なく、クラスまたは構造の中でforeach反復をサポートすることができます.ローズマリーを提供するだけで、クラス中のデータ構造を遍歴できます.コンパイラがローズマリーを検出すると、IEnumerableまたはIEnumerable<T>インターフェースのCurrenent、MoveNext、Discpose方法が自動的に生成されます.
         ディケンサは、同じタイプの値を返すことができる順序付きシーケンスの一部のコードです.
         シーケンサは、方法、演算子、またはgetアクセスのコード体として使用できます.
         ディケンサコードは、yield return文を使用して、各要素を順次返します.イガイドbreakは反復を終了します.
         クラスの中で複数のサブジェネレータを実現することができます.各サブエージェントは、任意のクラスのメンバーのように一意の名前が必要であり、foreach文でクライアントコードに呼び出されることができます.以下のように、foreach(int x in SampleClass.Iterator 2){}
         ディケンサの復帰タイプは、IEnumerable、IEnumerable<T>またはIEnumerator<T>でなければなりません.
  • コード例
  • public class DaysOfTheWeek : System.Collections.IEnumerable
    {
        string[] m_Days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
        public System.Collections.IEnumerator GetEnumerator()
        {
            for (int i = 0; i < m_Days.Length; i++)
            {
                yield return m_Days[i];
            }
        }
    }
    class TestDaysOfTheWeek
    {
        static void Main()
        {
            DaysOfTheWeek week = new DaysOfTheWeek();
            foreach (string day in week)
            {
                System.Console.Write(day + " ");
            }
        }
    }