C#使用yield關(guān)鍵字讓自定義集合實(shí)現(xiàn)foreach遍歷的方法
foreach遍歷是C#常見的功能,而本文通過實(shí)例形式展現(xiàn)了C#使用yield關(guān)鍵字讓自定義集合實(shí)現(xiàn)foreach遍歷的方法。具體步驟如下:
一般來說當(dāng)我們創(chuàng)建自定義集合的時(shí)候?yàn)榱俗屍淠苤С謋oreach遍歷,就只能讓其實(shí)現(xiàn)IEnumerable接口(可能還要實(shí)現(xiàn)IEnumerator接口)
但是我們也可以通過使用yield關(guān)鍵字構(gòu)建的迭代器方法來實(shí)現(xiàn)foreach的遍歷,且自定義的集合不用實(shí)現(xiàn)IEnumerable接口
注意:雖然不用實(shí)現(xiàn)IEnumerable接口 ,但是迭代器的方法必須命名為GetEnumerator(),返回值也必須是IEnumerator類型。
實(shí)例代碼以及簡單注釋說明如下:
class Person { public string Name; public void SayHi() { Console.WriteLine("Hello: {0}",this.Name); } } //非常簡單的自定義集合(- -簡單到增加,刪除,索引器等功能都沒有實(shí)現(xiàn)) 該類沒有實(shí)現(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 作用就是返回集合的一個(gè)元素,并移動到下一個(gè)元素上 yield return item; } } } class Program { static void Main(string[] args) { PersonList list = new PersonList(); foreach (Person item in list) { item.SayHi(); } Console.ReadLine(); } }
感興趣的讀者可以動手測試一下本文實(shí)例代碼,相信會有新的收獲。
相關(guān)文章
一文詳解C#中重寫(override)及覆蓋(new)的區(qū)別
這篇文章主要為大家詳細(xì)介紹了C#中重寫(override)及覆蓋(new)這兩個(gè)關(guān)鍵詞的區(qū)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-03-03C#自定義RSA加密解密及RSA簽名和驗(yàn)證類實(shí)例
這篇文章主要介紹了C#自定義RSA加密解密及RSA簽名和驗(yàn)證類,實(shí)例分析了C#實(shí)現(xiàn)RSA加密解密及RSA簽名和驗(yàn)證的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03C++中const的實(shí)現(xiàn)細(xì)節(jié)介紹(C,C#同理)
本篇文章主要是對C++中const的實(shí)現(xiàn)細(xì)節(jié)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01C#?TaskScheduler任務(wù)調(diào)度器的實(shí)現(xiàn)
本文主要介紹了C#?TaskScheduler任務(wù)調(diào)度器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>2023-05-05淺談c#開發(fā)者應(yīng)該了解的15個(gè)特性
本文列舉了15個(gè)值得了解的C#特性,旨在讓.NET開發(fā)人員更好的使用C#語言進(jìn)行開發(fā)工作。2021-05-05