2009-10-20 64 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 <牛逼>,而不檢查載有()第一。