C# 应该列出<;T>;。删除前必须加上列表<;T>;。存在?

C# 应该列出<;T>;。删除前必须加上列表<;T>;。存在?,c#,.net,list,generics,C#,.net,List,Generics,具有列表路径=新列表()我想删除我不确定是否存在的项目。我应该检查它是否存在,还是直接运行Remove方法 在路径移除(stringVar)之前,是否需要或认为if(paths.Exists(stringVar))是一种良好的做法 如果列表中没有这样的项目,运行Remove而不运行Exists只会返回false。否它不会引发异常,并且不需要额外检查。见: 如果项目成功删除,则为true; 否则,错误。这种方法也适用 如果在中未找到项,则返回false 名单 不,不要检查。因为Remove已经进行

具有
列表路径=新列表()我想删除我不确定是否存在的项目。我应该检查它是否存在,还是直接运行Remove方法

在路径移除(stringVar)
之前,是否需要或认为if(paths.Exists(stringVar))是一种良好的做法


如果列表中没有这样的项目,运行Remove而不运行Exists只会返回false。

否它不会引发异常,并且不需要额外检查。见:

如果项目成功删除,则为true; 否则,错误。这种方法也适用 如果在中未找到项,则返回false 名单


不,不要检查。因为
Remove
已经进行了检查。你的额外检查只是多余的,不会带来任何好处。

它不会引发异常,尽管在移除物品之前检查物品是否存在始终是一种良好的做法。这不会造成伤害:)@Devjosh:这是不必要的,并且会在具有大列表的性能关键情况下造成伤害,因为有了额外检查,列表被遍历两次而不是一次。@daniel,谢谢,我不知道remove Method的默认行为,它不仅没有增加好处,而且还需要对列表进行另一次扫描(即O(N))对。我在对Devjosh关于这个问题的评论中已经指出了这一点。理论上这是正确的。但是,我确实遇到过这样一种情况,即有多个线程访问Remove,并且偶尔会遇到从实现中的某个地方发出的indexoutfrange异常。我最终把它列为一个不可更改的列表来解决这个问题。