E' veramente interessante la compattezza e l'eleganza del codice che è possibile scrivere combinando generics e iterators.
Ad esempio per enumerare al contrario gli elementi di una sequenza (per sequenza si intende un qualsiasi oggetto che implementa l'interfaccia IEnumerable<T>):
IEnumerable<T> Reverse<T>(IEnumerable<T> sequence)
{
// Un overload del costruttore di Stack<T> accetta in input
// un oggetto che implementa IEnumerable<T>.
Stack<T> stack = new Stack<T>(sequence);
foreach (T item in stack)
yield return item;
}