本周我参加了在荷兰举行的 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();
}
}
}
显然,我给出的答案是错误的。我论证结束,因为 int 是一种值类型,所以传入的实际值Console.WriteLine()
被复制,所以输出将是 0...9。然而i
,在这种情况下被作为引用类型处理。正确答案是它会显示 10 乘以 10。谁能解释为什么以及如何?