static readonly string Padding = new string(' ', 30); static IEnumerable<int> CreateEnumerable() { Console.WriteLine("{0}start of CreateEnumerable()", Padding); for (int i = 0; i < 3; i++) { Console.WriteLine("{0}about to yield {1}", Padding, i); yield return i; Console.WriteLine("{0}after yield", Padding); } Console.WriteLine("{0}yielding final value", Padding); yield return -1; Console.WriteLine("{0}end of CreateEnumerable()", Padding); } static void Main(string[] args) { IEnumerable<int> iterable = CreateEnumerable(); IEnumerator<int> iterator = iterable.GetEnumerator(); Console.WriteLine("starting to iterate"); while (true) { Console.WriteLine("calling MoveNext()...."); bool result = iterator.MoveNext(); Console.WriteLine("...MoveNext result={0}", result); if (!result) { break; } Console.WriteLine("fetching current...."); Console.WriteLine("...Current result={0}", iterator.Current); } }