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