使用yield关键字让自定义集合实现foreach遍历
2018-06-18 03:16:03来源:未知 阅读 ()
一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口)
但是我们也可以通过使用yield关键字构建的迭代器方法来实现foreach的遍历,且自定义的集合不用实现IEnumerable接口
注:虽然不用实现IEnumerable接口 ,但是迭代器的方法必须命名为GetEnumerator() ,返回值也必须是IEnumerator类型
实例代码以及简单说明如下:
1 class Person 2 { 3 public string Name; 4 public void SayHi() 5 { 6 Console.WriteLine("Hello: {0}",this.Name); 7 } 8 } 9 //非常简单的自定义集合(- -简单到增加,删除,索引器等功能都没有实现) 该类没有实现IEnumerable接口 10 class PersonList 11 { 12 Person[] pers =new Person[4]; 13 public PersonList() 14 { 15 pers[0] = new Person() { Name = "1" }; 16 pers[1] = new Person() { Name = "2" }; 17 pers[2] = new Person() { Name = "3" }; 18 pers[3] = new Person() { Name = "4" }; 19 20 } 21 //简单的迭代器方法 22 public IEnumerator GetEnumerator() 23 { 24 25 foreach (Person item in pers) 26 { 27 //yield return 作用就是返回集合的一个元素,并移动到下一个元素上 28 yield return item; 29 } 30 31 } 32 } 33 class Program 34 { 35 static void Main(string[] args) 36 { 37 PersonList list = new PersonList(); 38 foreach (Person item in list) 39 { 40 item.SayHi(); 41 } 42 Console.ReadLine(); 43 } 44 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 关键字decltype 2020-05-30
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 1.ffmpeg、ffplay、ffprobe命令使用 2020-05-11
- 关于使用ffmpeg的一些牢骚 2020-05-08
- G++编译链接的那些事!G++的特殊使用方法[常用] 2020-04-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash