在Design Pattern中,Iterator Pattern相信大家都很熟悉,而在C#中,使用foreach語法本身就可以算是在使用Iterator Pattern了。在.Net支援的資料結構裡,大部份都會支援foreach語法,不過有時候因為需求,會自己實作其它的資料結構,本身文章將會說明如何讓自己設計的類別支援foreach語法。

現在假設要從資料庫撈Person資料表的資料,欄位有age跟name並且包成Person物件,Person類別的設計如下:

 

再來實作資料結構MyList,用來放Person物件。

首先引用System.Collections這個命名空間。

 

MyList的程式碼如下,特別注意的是MyList要繼承IEnumerable<>跟IEnumerable,少一個都不行。

在IEnumerable<T>.GetEnumerator中,有使用到yield這個關鍵字,這是C# 2.0開始才有的,相較於C# 1.0的時代,可以減少許多實作的程式碼。有了yield關鍵字,可以很輕易的篩選要回傳的元素,本範例為了方便說明,所以是回傳所有的元素。

 

之後在Main函式中加入下列程式碼,也就是加入4個Person物件並設定相關屬性。

 

執行結果。

 

如果覺得這樣太簡單了,可以做一些特別的篩選動作,例如讓偶數位的元素先出來,然後是奇數位的。

 

執行結果。

 

試一試LINQ語法,找出age為12的元素。

 

執行結果。

文章標籤
全站熱搜
創作者介紹
創作者 卑微研究生 的頭像
卑微研究生

卑微研究生的部落格

卑微研究生 發表在 痞客邦 留言(0) 人氣(2,183)