访问Modified Closure - 为什么这是一个建议的修复?

时间:2016-12-08 19:33:56

标签: c# closures resharper

所以我有这样的代码:

int totalRequestsToSend = 0;
i = 1;

foreach (file in files)
{
    try
    {
        // This can throw if adding request fails for some reason, e.g. file does not exist
        requests.AddRequest(
            new FileStoreRequest(file)
            {
                OnStoreConfirm = (file) =>
                {
                    progress.Report((i*100)/totalRequestsToSend)
                    Interlocked.Increment(ref i);
                }
            }
            );
        totalRequestsToSend += 1;
    }
    catch(Exception e) {
        // handle exception
    }
}

Resharper抱怨"访问修改后的封闭"关于我在lambda中使用totalRequestsToSend的行。

逻辑按预期工作,并且可以忽略投诉,但是,Resharper建议修复之一将int变量更改为大小为1的数组,如下所示:

int[] totalRequestsToSend = {0};
i = 1;

foreach (file in files)
{
    try
    {
        requests.AddRequest(
            new FileStoreRequest(file)
            {
                OnStoreConfirm = (file) =>
                {
                    progress.Report((i*100)/totalRequestsToSend[0])
                    Interlocked.Increment(ref i);
                }
            }
            );
        totalRequestsToSend[0] += 1;
    }
    catch(Exception e) {
        // handle exception
    }
}

这不会引起Resharper的投诉。我很困惑。在这种情况下,如何使用与使用变量不同的数组?

感谢。

1 个答案:

答案 0 :(得分:0)

没有任何不同。重构没有任何成效。