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();
}
}
感興致的讀者可以著手測試一下本文實例代碼,信任會有新的收成。