首页 > 代码库 > 使用yield关键字让自定义集合实现foreach遍历

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

       一般来说当我们创建自定义集合的时候为了让其能支持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 PersonList11     {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 Program34     {       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     }