我有以下代码:
dataContext.Objects.DeleteAllOnSubmit(dataContext.Objects.Where(o => o.Id == object.Id));
ReSharper强调object.Id
并告诉我:
访问修改后的闭包
我理解为什么要这样做并将代码更改为:
int localId = object.Id;
dataContext.Objects.DeleteAllOnSubmit(dataContext.Objects.Where(o => o.Id == localId));
但现在ReSharper给了我两个下划线。第一个是在localId
下宣布并分配的:
分配的值未在任何执行路径中使用
,第二个位于localId
下,在查询中使用它仍然是:
访问修改后的闭包
为什么会这样?是否对局部变量进行了优化,以便我仍然可以有效地访问查询中的对象字段?
这是我需要担心的吗?该代码似乎工作正常,但我试图确保我们不会留下任何时间炸弹。
我能做些什么(除了忽略这些消息)才能解决问题?
拆分这样的代码并实现查询:
int localId = object.Id;
var objectsToDelete = dataContext.Objects.Where(o => o.Id == localId)).ToList();
dataContext.Objects.DeleteAllOnSubmit(objectsToDelete);
解决"访问修改后的闭包"消息,但保留"分配的值不用于任何执行路径"信息。只能通过完全删除它来解决这个问题:
var objectsToDelete = dataContext.Objects.Where(o => o.Id == object.Id)).ToList();
dataContext.Objects.DeleteAllOnSubmit(objectsToDelete);