所以让我说我有这个代码:
Func<int>[] list = new Func<int>[4];
for (int i = 0; i < 4; ++i)
{
list[i] = delegate
{
return i;
};
}
foreach (var f in list) Console.WriteLine(f());
输出
4
4
4
4
因为代理中的所有“i”都指向同一个变量。
有没有办法保留代表创建时我所处的状态的副本?
答案 0 :(得分:1)
你需要在循环中声明一个单独的变量,以便每个委托在其闭包中引用它自己的副本。