close

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

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

2010-01-30_080857

 

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

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

2010-01-30_085452

 

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

2010-01-30_081105

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

 

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

2010-01-30_081134

 

執行結果。

2010-01-30_081151

 

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

2010-01-30_081236

 

執行結果。

2010-01-30_081249

 

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

2010-01-30_081439

 

執行結果。2010-01-30_081453

arrow
arrow
    全站熱搜

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