天天看點

自定義類實作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[];
  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();    
  }
}