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[];
public PersonList()
{
pers[] = new Person() { Name = "1" };
pers[] = new Person() { Name = "2" };
pers[] = new Person() { Name = "3" };
pers[] = 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();
}
}