【发布时间】:2014-09-23 12:33:30
【问题描述】:
假设我在 C# 中有这段代码:
static void Main(string[] args)
{
List<Func<int>> fs = new List<Func<int>>();
for (int i = 0; i < 5; i++)
fs.Add(() => { return i; });
for (int i = 0; i < 5; i++)
Console.WriteLine(fs[i]());
Console.ReadLine();
}
当我运行它时,我希望它会打印出来
0
1
2
3
4
但它会打印出来
5
5
5
5
5
相反。我的理解是Func中的代码只保留了i的地址,而不是获取i的值,应该避免这种做法。
所以我的问题是,有没有办法捕获局部变量并按值将它们传递给Func?
【问题讨论】:
-
我还没有找到它,但我知道它有重复。另见Closing over the loop variable considered harmful