我知道关于访问修改后的闭包警告有一百个关于SO的问题,但是创建引用变量的本地副本的通常修复似乎并没有清除在我的情况下警告。
这是我的代码:
SessionServiceModel sessionCache = null;
foreach (var id in bookingIds)
{
var booking = // Get booking from service given id
if (booking == null)
continue;
if (sessionCache == null || sessionCache.Id != booking.SessionId)
{
// Usually this would clear the warning
var sessionId = booking.SessionId;
// "Access to modified closure" on proceeding sessionId reference
sessionCache = _serviceProxy.Call<ISessionService>(svc => svc.Get(sessionId));
}
...
}
使用ReSharper 2017.1.1,实现建议的修复使我进入一个无限循环,为闭包创建更多局部变量,每个变量引用最后一个:
var sessionId = booking.SessionId;
var id1 = sessionId; // ReSharper fix: Copy to local variable
long[] id2 = {id1}; // ReSharper fix: Wrap local variable in array
sessionCache = _serviceProxy.Call<ISessionService>(svc => svc.Get(id2[0]));
显然,我如何构建这个问题有些不对劲。任何人都可以提出更好的方法吗?