0

所以假设我有这个代码:

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

有什么方法可以保留我在创建委托时所处的状态的副本?

4

1 回答 1

1

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

于 2013-08-15T00:51:40.403 回答