In the How Can I Expose Only a Fragment of IList<> question one of the answers had the following code snippet:
IEnumerable FilteredList() {
Iteration. It creates a state machine "under the covers" that remembers where you were on each additional cycle of the function and picks up from there.