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