C#使用yield關(guān)鍵字讓自定義集合實現(xiàn)foreach遍歷的方法
foreach遍歷是C#常見的功能,而本文通過實例形式展現(xiàn)了C#使用yield關(guān)鍵字讓自定義集合實現(xiàn)foreach遍歷的方法。具體步驟如下:
一般來說當(dāng)我們創(chuàng)建自定義集合的時候為了讓其能支持foreach遍歷,就只能讓其實現(xiàn)IEnumerable接口(可能還要實現(xiàn)IEnumerator接口)
但是我們也可以通過使用yield關(guān)鍵字構(gòu)建的迭代器方法來實現(xiàn)foreach的遍歷,且自定義的集合不用實現(xiàn)IEnumerable接口
注意:雖然不用實現(xiàn)IEnumerable接口 ,但是迭代器的方法必須命名為GetEnumerator(),返回值也必須是IEnumerator類型。
實例代碼以及簡單注釋說明如下:
class Person
{
public string Name;
public void SayHi()
{
Console.WriteLine("Hello: {0}",this.Name);
}
}
//非常簡單的自定義集合(- -簡單到增加,刪除,索引器等功能都沒有實現(xiàn)) 該類沒有實現(xiàn)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();
}
}
感興趣的讀者可以動手測試一下本文實例代碼,相信會有新的收獲。
相關(guān)文章
一文詳解C#中重寫(override)及覆蓋(new)的區(qū)別
這篇文章主要為大家詳細(xì)介紹了C#中重寫(override)及覆蓋(new)這兩個關(guān)鍵詞的區(qū)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-03-03
C++中const的實現(xiàn)細(xì)節(jié)介紹(C,C#同理)
本篇文章主要是對C++中const的實現(xiàn)細(xì)節(jié)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
C#?TaskScheduler任務(wù)調(diào)度器的實現(xiàn)
本文主要介紹了C#?TaskScheduler任務(wù)調(diào)度器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>2023-05-05

