Treat Code as Data: C#: Introducing Closures and Bound Variables: Listing 2

What a difference restructuring can make. In this version, the compiler has created a closure containing one bound variable: Current. That bound variable is returned for every item in the sequence. Furthermore, changes made to the bound variable are reflected next time you enumerate the sequence.

DateTime current = DateTime.Now;

IEnumerable<DateTime> sequence = 
   MyExtensions.Generate(5, () => current);

foreach (var time in sequence)
{
   Console.WriteLine(time);
   System.Threading.Thread.Sleep(9000);
}

System.Threading.Thread.Sleep(9000);

current = DateTime.Now;
Console.WriteLine("Do it again");

foreach (var time in sequence)
{
   Console.WriteLine(time);
   System.Threading.Thread.Sleep(9000);
}

Reader Comments:

Add Your Comments Now:

Your Name:(optional)
Your Email:(optional)
Your Location:(optional)
Comment:
Please type the letters/numbers you see above