C#中是否有一个集合,不允许您向其中添加重复项?例如,对于傻类
public class Customer {
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public override int GetHashCode() {
return (FirstName + LastName + Address).GetHashCode();
}
public override bool Equals(object obj) {
Customer C = obj as Customer;
return C != null && String.Equals(this.FirstName, C.FirstName) && String.Equals(this.LastName, C.LastName) && String.Equals(this.Address, C.Address);
}
}
以下代码(显然)将引发异常:
Customer Adam = new Customer { Address = "A", FirstName = "Adam", LastName = "" };
Customer AdamDup = new Customer { Address = "A", FirstName = "Adam", LastName = "" };
Dictionary<Customer, bool> CustomerHash = new Dictionary<Customer, bool>();
CustomerHash.Add(Adam, true);
CustomerHash.Add(AdamDup, true);
但是,有没有一个可以保证唯一性但没有KeyValuePairs的类呢?我以为HashSet<T>
可以做到这一点,但是在阅读了文档之后,类似乎只是一个固定的实现(见图)。
您能否解释更多为何
—
JaredPar'3
HashSet<T>
不足?
@mootinator:
—
路加福音
Dictionary<K,V>
该类不保证任何顺序。
我猜他只是想在尝试添加现有值时引发异常...为此,只需检查从
—
digEmAll 2011年
HashSet<T>.Add
方法返回的布尔值并在以下情况时引发false
...
强烈建议仅重载那些不可变类型。可变的客户通常会使用默认的“参考-平等”条件更好。
—
Henk Holterman'3
HashSet<T>
。MSDN说:“ HashSet <T>类提供高性能的集合操作。集合是一个不包含重复元素且其元素没有特定顺序的集合。”