C#應用yield症結字讓自界說聚集完成foreach遍歷的辦法。本站提示廣大學習愛好者:(C#應用yield症結字讓自界說聚集完成foreach遍歷的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#應用yield症結字讓自界說聚集完成foreach遍歷的辦法正文
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(); } }
感興致的讀者可以著手測試一下本文實例代碼,信任會有新的收成。