foreach遍历是C#常见的成果,而本文通过实例形式展现了C#使用yield关键字让自界说调集实现foreach遍历的要领。具体法式如下:
一般来说当我们创建自界说调集的时候为了让其能撑持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口)
但是我们也可以通过使用yield关键字构建的迭代器要领来实现foreach的遍历,且自界说的调集不用实现IEnumerable接口
注意:
虽然不用实现IEnumerable接口 ,但是迭代器的要领必需定名为GetEnumerator(),,返回值也必需是IEnumerator类型。
实例代码以及简单注释说明如下:
class Person { public string Name; public void SayHi() { Console.WriteLine("Hello: {0}",this.Name); } } //非常简单的自界说调集(- -简单到增加,删除,索引器等成果都没有实现) 该类没有实现IEnumerable接口 class PersonList { Person[] pers =new Person[4]; public PersonList() { pers[0] = new Person() { Name = "1" }; pers[1] = new Person() { Name = "2" }; pers[2] = new Person() { Name = "3" }; pers[3] = new Person() { Name = "4" }; } //简单的迭代器要领 public IEnumerator GetEnumerator() { foreach (Person item in pers) { //yield return 感化就是返回调集的一个元素,并移动到下一个元素上 yield return item; } } } class Program { static void Main(string[] args) { PersonList list = new PersonList(); foreach (Person item in list) { item.SayHi(); } Console.ReadLine(); } }