ある時点で、次のようなコードを書いたことがあると思います。
For Each datVehicle In datVehicles
If datVehicle.ID = -1 Then
datVehicles.Remove(datVehicle)
End If
Next
これは問題なくコンパイルされますが、列挙内の項目を削除できないため、実行時例外がスローされます。ReSharper はこのようなものをキャッチしますか?
この問題をキャッチする ReSharper のバージョンはありません。反復コードは非常に複雑になる可能性があるため、この状態について警告できるカスタム パターンを作成するのは簡単ではありません。
カスタム パターンを作成する場合は、提案を作成することをお勧めします (警告の可能性があります)。あなたのパターンは次のようになります。
$ICOLLECTION$.Remove($arg$)
$ICOLLECTION$ は System.Collections.Generic.ICollection 型の式で、$arg$ は引数のプレースホルダーです。
このようにして、常に提案 (または警告) が表示されます。
質問が ReSharper のみに関するものであることはわかっていますが、回答を完了するための回避策を示したいと思います。この問題の回避策は、RemoveAll を使用することです。C# での例を次に示します。
datVehicles.RemoveAll(x => x.Id == -1);
VS 2010 上の Resharper 6.1 は、そのままではキャッチしません。Resharper は、それが linq への変換を示唆しているため、かなり Skeet コードであるとは考えていません。
自動的に行われるとは思いませんが、これを識別するカスタム パターンを簡単に作成できます。参照: https://blog.jetbrains.com/dotnet/2010/08/19/highlighting-custom-patterns-with-resharper/