1

通常、 Resharper のAccess to Modified Closure警告は非常に役立ちます。Anyfor each ループ内でメソッドを呼び出すと、開き括弧と閉じ括弧を使用しないと警告が表示されることに気付きました。を追加するとすぐに()、エラーはなくなります。

エラー自体はなくなりましたか、それとも 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
4

1 に答える 1

3

これは Resharper のバグだと思うので、そこに提出します。すぐに実行される linq ステートメントに変更されたクロージャを含めることはできませんAny

VB は私の「母国語」ではありませんが、(VB6 の場合と同様に) VB.Net では括弧が何の違いも生じないはずです。

于 2013-05-11T14:36:54.660 に答える