本周我参加了荷兰的TechDays 2013,我得到了一个有趣的测验问题.问题是:以下程序的输出是什么.这是代码的样子.
class Program
{
delegate void Writer();
static void Main(string[] args)
{
var writers = new List<Writer>();
for (int i = 0; i < 10; i++)
{
writers.Add(delegate { Console.WriteLine(i); });
}
foreach (Writer writer in writers)
{
writer();
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,我给出的答案是错误的.我认为,因为int是一个值类型,传递的实际值Console.WriteLine()被复制,所以输出将是0 ... 9.但是i在这种情况下作为参考类型处理.正确答案是它会显示十次10.有人可以解释为什么以及如何解释?