C# List<T> 包含测试

5

在删除一个项目时,这种if测试是必要的吗?

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

那么,这个测试怎么样?

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

2
为什么不直接阅读文档或者尝试一下呢?看起来这是一个很简单的事情。 - Ed S.
4
在Stackoverflow上提问并没有什么问题,即使你是正确的,阅读文档始终是一个好习惯。这里的答案也可以提供额外的见解,这可能对他很有趣(例如第二个答案中提到的Hashset)。 - Meta-Knight
2个回答

11

您不必进行测试以删除。如果没有删除任何内容,Remove()将返回false。

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

另请参阅:http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx


2
如果您不想要重复项,那么您不应该测试;您应该使用一个不允许您拥有重复项的集合。否则,您将无法保证线程安全性。 - Tordek
假设线程安全是一个问题。如果是这样,你还需要确保你的集合类是线程安全的(我猜想微软的可能是,但我不确定)。 - snarf

7
如果你想多次添加一个元素,并且只希望在集合中保留一次,而无需先检查Contains(),你可以使用HashSet<T>。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接