close
在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的元素。
全站熱搜
留言列表