一般來說當我們創建自定義集合的時候為了讓其能支持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 }
新聞熱點
疑難解答