其實這個東西老早在 N 年前 就看過高人的 CODE 裡面有出現 當年調查了一下
除了大喊yoooooooo~ 之外 根本不知道他在公啥小 果斷裝傻 沒關係長大以後就會懂了
什麼時候長大呢? 現在就長大了
我們先看看 MSDN怎麼說
MSDN表示:yield 關鍵字,表示它所在的方法、運算子或 get 存取子是 Iterator。 您使用 Iterator 對集合中的自訂反覆項目。
Iterator 是啥小? Google翻譯表示:迭代器
迭代器 是啥小? Wiki表示:迭代器(iterator)有時又稱游標(cursor)是程式設計的軟體設計模式,可在容器物件(container,例如鏈表或陣列)上遍訪的介面,設計人員無需關心容器物件的內容。
總算還是有人講地球話
簡單來說 就是整天在用的 foreach (傳回型別必須是 IEnumerable、 IEnumerable<T>、 IEnumerator或 IEnumerator<T>。)
其實 MSDN 這篇的範例還算滿好懂的
http://msdn.microsoft.com/zh-tw/library/9k7k7cf0.aspx
應用層面上 有時候我們需要 從一個集合中篩選小集合 或者 從查詢中篩選結果 或者 從條件判斷中篩選true條件
以往都這麼做 new 個 List<T> 然後 add add add~
而使用 yield 的話 則可以省省這個 List<T>
yoooooooo~ 太神奇了蘿絲
另一個比較實用的地方是 可以使用在 get 存取子
有時候我們 常常會有一些 固定不變的像是常數的數據組
以往都這麼做 一堆的列舉 一堆的陣列 一堆的產生List<T>物件的方法 姑且不論這個寫法好不好 光是有人惡搞的話 你就會發現整個專案 布滿無數重複的該方法
換成 yield 並把 Members 變成一個類別的唯讀屬性
要取得 Members 都只能透過特定的類別的屬性
沒有留言:
張貼留言