所以我有这样的代码:
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的投诉。我很困惑。在这种情况下,如何使用与使用变量不同的数组?
感谢。
答案 0 :(得分:0)
没有任何不同。重构没有任何成效。