我确信在某些时候我们都写了这样的代码:
For Each datVehicle In datVehicles
If datVehicle.ID = -1 Then
datVehicles.Remove(datVehicle)
End If
Next
编译得很好,但会抛出运行时异常,因为您无法删除枚举中的项目。 ReSharper会抓住这样的东西吗?
答案 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);