我是草包,錯了公幹我,下面要印出禮拜日到禮拜六。
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