Friday, January 16, 2009

Iterator (1) C#


我是草包,錯了公幹我,下面要印出禮拜日到禮拜六。

DaysOfTheWeek week = new DaysOfTheWeek();

foreach (string day in week) 

  System.Console.Write(day + " "); 
}

foreach 很方便,但week 一定 :System.Collections.IEnumerable

程序大概是:

呼叫  week 的 GetEnumerator() 傳回一個  IEnumerator

public class DaysOfTheWeek : System.Collections.IEnumerable
    {
        string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };

        public System.Collections.IEnumerator GetEnumerator()
        {
              return new DOW(days);
        }

class DOW : IEnumerator 所以DOW要實作

  • object IEnumerator.Current    (現在的值)
           {   get        }
  • bool IEnumerator.MoveNext()  (是否還有下一筆)
           { if   return true;

                else   return false;  }

  • void IEnumerator.Reset()
           {

              
           }

這樣是不是很不方便,要寫一堆碼:

把  return new DOW(days) 改成下方

   for (int i = 0; i < days.Length; i++)
               {
                  yield return days[i];
               }

效果一樣,編譯器會暗中幫你生出上方的一堆碼

(Current,MoveNext( ),Reset())。

結論:

以後看到for () { yield return ;} 就了解是怎麼回事了吧

No comments:

Post a Comment