已經知道:主要乙個類實現了getenumerator函式就能foreach,而實現ienumerator介面只是實現 getenumerator函式的其中乙個辦法,也就說還有其他辦法實現getenumerator函式了?是的,c#2.0為我們提供了一種很簡單的方 法來實現getenumerator函式,那就是使用迭代器!(還記得吧,c#裡的迭代器和c++裡的是不同的)
下面是來自msdn的解說:
yieldyield return
1、定義person類
view code
1public
class person
2
1112
public
override
string tostring()
13
16 }
13、主函式**public
class peopleenum1
2
13 }
1415
public ienumerator getenumerator()
16
21 }
2223 }
view code
1執行,成功,嘿嘿class program
2 ;
1112 peopleenum1 peopleenum = new peopleenum1(persons);
1314
foreach (var item in peopleenum)
15
1920 system.console.readkey();
21 }
22 }
第一部分用預設迭代器getenumerator 實現了類的foreach,我們也可以定義自己的迭代器來獲取自己想要的列舉數。比較說,我想列舉出類中未成年人的資訊,預設的迭代器無能為力,該怎麼實現自定義的迭代器呢?
1、為peopleenum1類新增乙個迭代器 getchildren ,在這裡,這個迭代器是乙個屬性,也可以定義為函式。對於類中的元素,只有age 小於18的元素才 yield return ,其他的不要。
view code
2、主函式**
view code
輸出結果:
可以看到,自定義的迭代器 getchildren 成功foreach了。
注意:預設迭代器 getenumerator 的返回型別是 ienumerator ,並且在使用foreach時 in
後面直接是類名。而自定義迭代器 getchildren 的返回型別是 ienumerable,並且在使用foreach時 in 後面是
peopleenum.getchildren(類名.迭代器名)。好像,好像是規定這樣子的,原理是什麼還不清楚。
引用自 :
C 學習之用迭代器實現列舉器
已經知道 主要乙個類實現了getenumerator函式就能foreach,而實現ienumerator介面只是實現 getenumerator函式的其中乙個辦法,也就說還有其他辦法實現getenumerator函式了?是的,c 2.0為我們提供了一種很簡單的方 法來實現getenumerator函...
C 學習之用迭代器實現列舉器
已經知道 主要乙個類實現了getenumerator函式就能foreach,而實現ienumerator介面只是實現getenumerator函式的其中乙個辦法,也就說還有其他辦法實現getenumerator函式了?是的,c 2.0為我們提供了一種很簡單的方法來實現getenumerator函式,...
C 學習之用迭代器實現列舉器
已經知道 主要乙個類實現了getenumerator函式就能foreach,而實現ienumerator介面只是實現getenumerator函式的其中乙個辦法,也就說還有其他辦法實現getenumerator函式了?是的,c 2.0為我們提供了一種很簡單的方法來實現getenumerator函式,...