在创建委托时保持局部变量状态

时间:2013-08-15 00:50:34

标签: c# closures

所以让我说我有这个代码:

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”都指向同一个变量。

有没有办法保留代表创建时我所处的状态的副本?

1 个答案:

答案 0 :(得分:1)

你需要在循环中声明一个单独的变量,以便每个委托在其闭包中引用它自己的副本。