yield 是 C# 中用于創建迭代器的關鍵字。使用 yield 關鍵字可以使一個方法返回一個可以逐個訪問的集合,而不需要立即構建整個集合。
yield 的實現原理如下:
- 當調用包含 yield 關鍵字的方法時,方法體內的代碼不會立即執行,而是返回一個實現了 IEnumerable 或 IEnumerator 接口的迭代器對象。
- 當迭代器對象的 MoveNext() 方法被調用時,方法體內的代碼開始執行。直到遇到 yield 關鍵字,該關鍵字會將當前的值返回給調用方,并暫停代碼的執行。
- 下次調用 MoveNext() 方法時,代碼會從上次暫停的位置繼續執行,直到遇到下一個 yield 關鍵字或方法結束。
- 當迭代器對象的 Reset() 方法被調用時,代碼會回到初始狀態,下次調用 MoveNext() 方法時會重新執行。
- 當迭代器對象到達集合的末尾時,MoveNext() 方法返回 false,表示迭代結束。
這樣,通過 yield 關鍵字可以方便地創建一個延遲加載的集合。在需要迭代集合元素時,只會執行必要的代碼,減少了內存開銷和計算的時間復雜度。