yield return 到底幫我們做了什麼?我是怎麼一路理解到它其實在產生 Enumerator 的
前言 上一篇文章,我理解了 foreach 的運作方式。原來 foreach 並不知道 List、Dictionary 或 Queue 的內部實作,它只會透過 IEnumerator 一次取得一個元素。理解這件事情後,我又開始好奇另一件事。 Enumerator 到底是誰寫的? 如果每一個 Collection 都要自己實作 IEnumerator,不是很麻煩嗎? 如果沒有 yield return 假設今天我要建立一個可以被 foreach 遍歷的物件: public class NumberCollection { } 如果沒有 yield return,那我就必須自己建立一個 Enumerator。 public class NumberEnumerator : IEnumerator<int> { public int Current => ... object IEnumerator.Current => Current; public bool MoveNext() { ... } public void Reset() { ... } public void Dispose() { } } 還要讓 Collection 回傳這個 Enumerator。 ...