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

2022-02-24 05:13:55 字數 2508 閱讀 5112

已經知道:主要乙個類實現了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

1

public

class peopleenum1

2

13 }

1415

//預設的迭代器?

16public ienumerator getenumerator()

17

22 }

2324

25//

自定義迭代器

26 public ienumerable getchildren

27

36 }

37 }

38 }

39 }

2、主函式**

view code

1

class program

2 ;

1112

13 peopleenum1 peopleenum = new peopleenum1(persons);

1415

foreach (var item in peopleenum)

16

1920

21 console.writeline("

\n集合中未成年人的資訊

");22

23foreach (var item in peopleenum.getchildren)

24

2728 system.console.readkey();

29 }

30 }

輸出結果:

可以看到,自定義的迭代器 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函...