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中应该没有任何区别。