使用yield关键字让自定义集合实现foreach遍历

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口)

但是我们也可以通过使用yield关键字构建的迭代器方法来实现foreach的遍历,且自定义的集合不用实现IEnumerable接口

注:虽然不用实现IEnumerable接口 ,但是迭代器的方法必须命名为GetEnumerator() ,返回值也必须是IEnumerator类型

实例代码以及简单说明如下:

1classPerson2{3publicstringName;4publicvoidSayHi()5{6Console.WriteLine("Hello: {0}",this.Name);7}8}9//非常简单的自定义集合(- -简单到增加,删除,索引器等功能都没有实现) 该类没有实现IEnumerable接口10classPersonList11{12Person[] pers =newPerson[4];13publicPersonList()14{15pers[0] =newPerson() { Name ="1"};16pers[1] =newPerson() { Name ="2"};17pers[2] =newPerson() { Name ="3"};18pers[3] =newPerson() { Name ="4"};1920}21//简单的迭代器方法22publicIEnumerator GetEnumerator()23{2425foreach(Person iteminpers)26{27//yield return 作用就是返回集合的一个元素,并移动到下一个元素上28yieldreturnitem;29}3031}32}33classPRogram34{35staticvoidMain(string[] args)36{37PersonList list =newPersonList();38foreach(Person iteminlist)39{40item.SayHi();41}42Console.ReadLine();43}44}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航