为什么当Enumerable方法调用with()时,访问修改的闭包警告消失



Resharper的Access to Modified Closure警告通常很有帮助。我只是注意到,当我在每个循环中调用Any方法时,如果我不使用左括号和右括号,我会得到一个警告。只要我加入(),错误就消失了。

错误本身会消失吗,还是我只是不小心欺骗了Resharper的静态代码分析检测?

Dim groupExists as Boolean
For each oldPerson in oldData
    'access to modified closure warning on oldPerson.groupId
    groupExists = (From newPerson In newData 
                   Where newPerson.GroupId = oldPerson.groupId).Any
    'no closure problem reported
    groupExists = (From newPerson In newData 
                   Where newPerson.GroupId = oldPerson.groupId).Any()
Next

当然,我可以通过将以下代码放入For Each循环并将newPerson.GroupId与局部声明的变量进行比较来解决这个问题。

'declare locally to avoid access to modified closure
Dim groupId as Integer = person.groupId

我认为这是一个Resharper的bug,我会在那里提交它。linq语句不能像Any语句那样,在立即执行的linq语句中有修改过的闭包。

VB不是我的"母语",但我想括号在VB中应该没有任何区别。

最新更新