0

我敢肯定,我们都曾编写过这样的代码:

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

哪个编译得很好,但会引发运行时异常,因为您无法删除枚举中的项目。ReSharper 能捕捉到这样的事情吗?

4

3 回答 3

0

我认为它不会自动发生,但您可以轻松创建自定义模式来为您识别它。请参阅:https ://blog.jetbrains.com/dotnet/2010/08/19/highlighting-custom-patterns-with-resharper/

于 2012-11-15T17:48:06.297 回答
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 认为它不是 Skeet 代码,因为它建议转换为 linq。

于 2012-11-15T17:57:33.757 回答