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;
}