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>
そうすると思いましたが、ドキュメントを読むと、そのクラスは単なるセット実装のようです (考えてみてください)。
ベストアンサー1
HashSet<T>
あなたが探しているのはこれです。マイクロソフト(強調追加):
この
HashSet<T>
クラスは、高性能な集合演算を提供します。集合とは、重複する要素を含まない、その要素は特に順序付けられていません。
注意:HashSet<T>.Add(T item)
方法アイテムがコレクションに追加された場合はbool
--を返し、アイテムが既に存在する場合は--を返します。true
false