static void Main(string[] args)
{
List<Func<int>> lstFuncs = new List<Func<int>>();
for (int i = 0; i < 10; i++)
{
lstFuncs.Add( () => { return i; });
}
foreach (var item in lstFuncs)
{
Console.WriteLine(item());
}
Console.Read();
}
上述代码输出的结果是:
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Func<int> func = () => { return i; };
Console.WriteLine(func());
}
Console.Read();
}
输出的是 0 - 9.
第二种情况并不是闭包,当你return的是内部function时,就是一个闭包。内部function会close-over外部function的变量直到内部function结束。