我这一段代码,局部变量范围违规,C#?
delegate void Printer();
static void Main(string[] args)
{
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();
}
Console.ReadLine();
}
这里输出为“10”的十倍。
我的范围是在for循环中。但是,尽管我们在外面检索到我们仍然从我身上获得价值。
这怎么可能?
[关闭循环变量被认为是有害的](http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful。 aspx)在'foreach'循环的上下文中讨论了这一点,但同样的推理也代表'for'循环。另外,你会注意到'foreach'循环现在已经改变了。 –