2009-10-20 105 views
5

这种if-testing在删除项目时是否必要?C#列表<T>包含测试

if (_items.Contains(item)) 
{ 
    _items.Remove(item); 
} 

而且,这个测试呢?

if (!_items.Contains(item)) 
{ 
    _items.Add(item); 
} 
+2

为什么你不只是阅读文档和/或尝试它?看起来像一个简单的事情找出来。 – 2009-10-20 00:47:57

+4

在Stackoverflow上提出问题时,我看不出有什么问题,即使你是正确的,阅读文档总是一个好的反应。在这里的答案也可以提供额外的洞察力,可以让他感兴趣(比如在第二个答案中提到Hashset)。 – 2009-10-20 01:04:13

回答

11

您不必测试即可移除。如果Remove()没有删除任何内容,它将返回false。

如果您不想在列表中重复项目,您可以在添加之前进行测试。否则,你会有重复。

参见:http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

+2

如果你不想重复,你不应该测试;你应该使用一个不会让你重复的集合。否则,你没有线程安全性。 – Tordek 2009-10-20 00:52:59

+0

假设线程安全是一个问题。如果是这样,你还需要确保你的集合类是线程安全的(我猜MS可能是,idk)。 – snarf 2009-10-20 01:09:39

7

你也可以,如果你希望能够加入()的项目进行了多次,并有它只是在集合中出现一次使用一个HashSet <牛逼>,而不检查载有()第一。