Here's some code using the anonymous method feature of C# 2. What does it do?
Answer: Ah, the joys of captured variables. There's only one
using System;
using System.Collections.Generic;
class Test
{
delegate void Printer();
static void Main()
{
List<Printer> printers = new List<Printer>();
for (int i=0; i < 10; i++)
{
printers.Add(delegate { Console.WriteLine(i); });
}
foreach (Printer printer in printers)
{
printer();
}
}
}
using System.Collections.Generic;
class Test
{
delegate void Printer();
static void Main()
{
List<Printer> printers = new List<Printer>();
for (int i=0; i < 10; i++)
{
printers.Add(delegate { Console.WriteLine(i); });
}
foreach (Printer printer in printers)
{
printer();
}
}
}
Answer: Ah, the joys of captured variables. There's only one
i
variable here, and its value changes on each iteration of the loop. The anonymous methods capture the variable itself rather than its value at the point of creation - so the result is 10 printed ten times!
Comments
Post a Comment