为什么ReSharper告诉我局部变量未使用且我访问了修改后的闭包?

时间:2018-06-18 08:43:41

标签: c# linq-to-sql resharper

我有以下代码:

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);

0 个答案:

没有答案