下面将输出的代码片段数“10”十倍:为什么“引用”一个int(而不是值)存储?
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 (var printer in printers)
{
printer();
}
}
这是因为(来自https://www.toptal.com/c-sharp/interview-questions#iquestion-90455截取):
参考“委托在for循环和添加的” “,因此,我们退出循环后, 变量i已被设置为10,因此在调用每个代表 时,传递给它们的值均为10 “。
我的问题是:为什么是“参考”我存储?
不应被理解为'i'不可循环 – EpicKip
@EpicKip它在外面。请参阅我在答案中链接的博文。 –
请参阅:https://blogs.msdn.microsoft.com/ericlippert/2009/11/12/closing-over-the-loop-variable-considered-harmful/&https://blogs.msdn.microsoft.com/ ericlippert/2009/11/16/closed-over-the-loop-variable-part-two/ – PaulF