【发布时间】:2017-09-15 09:01:05
【问题描述】:
下面的代码sn-p会输出数字'10'十次:
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 的“引用”, 而不是价值本身。因此,在我们退出循环后, 变量 i 已设置为 10,所以到每个委托时 调用时,传递给它们的值都是 10。”
我的问题是:为什么会存储对 i 的“引用”?
【问题讨论】: