【发布时间】:2010-12-13 08:44:18
【问题描述】:
.NET 框架 (3.5) 中是否有一个集合(字典除外)在添加重复项时会引发异常?
HashSet 在这里不会抛出异常:
HashSet<string> strings = new HashSet<string>();
strings.Add("apple");
strings.Add("apple");
而字典是这样的:
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("dude", "dude");
dict.Add("dude", "dude"); //throws exception
编辑:是否有没有 (Key, Value) 的集合可以做到这一点?如果可能的话,我也想要 AddRange...
我自己滚动:
public class Uniques<T> : HashSet<T>
{
public Uniques()
{ }
public Uniques(IEnumerable<T> collection)
{
AddRange(collection);
}
public void Add(T item)
{
if (!base.Add(item))
{
throw new ArgumentException("Item already exists");
}
}
public void AddRange(IEnumerable<T> collection)
{
foreach (T item in collection)
{
Add(item);
}
}
}
【问题讨论】:
-
好的,我看到你的编辑,我正在删除我原来的答案。要回答您的编辑,不。
-
你不应该将'new'关键字添加到'Add'方法签名中,因为它隐藏了继承的成员HashSet
.Add(T)。 -
为什么不向 HashSet
添加扩展方法?像 AddRange/RemoveMany 会像 Linq(比如说 'Linq')
标签: .net collections unique duplicates