我這一段代碼,局部變量範圍違規,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'循環現在已經改變了。 –