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);
}
}
Run Code Online (Sandbox Code Playgroud)
以下代码(显然)将抛出异常:
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);
Run Code Online (Sandbox Code Playgroud)
但有没有一个类同样保证唯一性,但没有KeyValuePairs?我认为HashSet<T>会这样做,但是阅读了文档后,似乎该类只是一个集合实现(如图).
Don*_*nut 197
HashSet<T>是你在找什么.来自MSDN(重点补充):
本
HashSet<T>类提供高性能的设置操作.集合是一个不包含重复元素的集合,其元素没有特定的顺序.
请注意,如果项目已添加到集合中,则该HashSet<T>.Add(T item)方法返回bool- 如果该项目已经存在.truefalse
Jon*_*art 17
在HashSet上只是一个扩展方法怎么样?
public static void AddOrThrow<T>(this HashSet<T> hash, T item)
{
if (!hash.Add(item))
throw new ValueExistingException();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85283 次 |
| 最近记录: |