C 學習之用迭代器實現列舉器

2022-05-01 07:15:14 字數 1657 閱讀 5071

已經知道:主要乙個類實現了getenumerator函式就能foreach,而實現ienumerator介面只是實現 getenumerator函式的其中乙個辦法,也就說還有其他辦法實現getenumerator函式了?是的,c#2.0為我們提供了一種很簡單的方 法來實現getenumerator函式,那就是使用迭代器!(還記得吧,c#裡的迭代器和c++裡的是不同的)

下面是來自msdn的解說:

yieldyield return

1、定義person類

view code

1

public

class person

2

1112

public

override

string tostring()

13

16 }

1

public

class peopleenum1

2

13 }

1415

public ienumerator getenumerator()

16

21 }

2223 }

3、主函式**

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函式,...