0

ある時点で、次のようなコードを書いたことがあると思います。

For Each datVehicle In datVehicles
  If datVehicle.ID = -1 Then
    datVehicles.Remove(datVehicle)
  End If
Next

これは問題なくコンパイルされますが、列挙内の項目を削除できないため、実行時例外がスローされます。ReSharper はこのようなものをキャッチしますか?

4

3 に答える 3

0

この問題をキャッチする ReSharper のバージョンはありません。反復コードは非常に複雑になる可能性があるため、この状態について警告できるカスタム パターンを作成するのは簡単ではありません。

カスタム パターンを作成する場合は、提案を作成することをお勧めします (警告の可能性があります)。あなたのパターンは次のようになります。

$ICOLLECTION$.Remove($arg$)

$ICOLLECTION$ は System.Collections.Generic.ICollection 型の式で、$arg$ は引数のプレースホルダーです。

このようにして、常に提案 (または警告) が表示されます。

質問が ReSharper のみに関するものであることはわかっていますが、回答を完了するための回避策を示したいと思います。この問題の回避策は、RemoveAll を使用することです。C# での例を次に示します。

datVehicles.RemoveAll(x => x.Id == -1);
于 2012-11-15T19:33:11.747 に答える
0

VS 2010 上の Resharper 6.1 は、そのままではキャッチしません。Resharper は、それが linq への変換を示唆しているため、かなり Skeet コードであるとは考えていません。

于 2012-11-15T17:57:33.757 に答える
0

自動的に行われるとは思いませんが、これを識別するカスタム パターンを簡単に作成できます。参照: https://blog.jetbrains.com/dotnet/2010/08/19/highlighting-custom-patterns-with-resharper/

于 2012-11-15T17:48:06.297 に答える