当您删除枚举中的项目时,ReSharper会找到吗?

时间:2012-11-15 17:45:11

标签: vb.net resharper

我确信在某些时候我们都写了这样的代码:

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

编译得很好,但会抛出运行时异常,因为您无法删除枚举中的项目。 ReSharper会抓住这样的东西吗?

3 个答案:

答案 0 :(得分:0)

我不认为它会自动执行,但您可以轻松创建自定义模式以便为您识别。请参阅:http://blogs.jetbrains.com/dotnet/2010/08/highlighting-custom-patterns-with-resharper/

答案 1 :(得分:0)

VS 2010上的Resharper 6.1并没有开箱即用。 Resharper认为它不是Skeet-code tho,因为它建议转换为linq。

答案 2 :(得分:0)

没有版本的ReSharper能够解决这个问题。要创建可以警告这种情况的自定义模式并不容易,因为迭代代码可能非常复杂。

如果您想创建自定义模式,我建议您创建一个建议(可能是警告)。你的模式看起来像那样:

$ICOLLECTION$.Remove($arg$)

其中$ ICOLLECTION $是System.Collections.Generic.ICollection类型的表达式,$ arg $是参数占位符。

这样你就会有一个建议(或警告)。

我知道问题只是关于ReSharper,但我想展示解决方法来完成我的答案。此问题的解决方法是使用RemoveAll。以下是C#中的示例:

datVehicles.RemoveAll(x => x.Id == -1);