Czy istnieje kolekcja w C #, która nie pozwoli Ci dodać do niej zduplikowanych elementów? Na przykład w przypadku głupiej klasy
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);
}
}
Poniższy kod (oczywiście) zgłosi wyjątek:
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);
Ale czy istnieje klasa, która podobnie gwarantuje wyjątkowość, ale bez KeyValuePairs? Pomyślałem, że HashSet<T>
to zrobię, ale po przeczytaniu dokumentacji wydaje się, że klasa to tylko zestaw implementacji ( rysunek ).
HashSet<T>
jest to niewystarczające?
Dictionary<K,V>
Klasa nie gwarantuje żadnego rodzaju zamówienia.
HashSet<T>.Add
metody i wrzuć, gdy false
...
HashSet<T>
. MSDN mówi: „Klasa HashSet <T> zapewnia wysokowydajne operacje na zbiorach. Zestaw to kolekcja, która nie zawiera zduplikowanych elementów i której elementy nie są w określonej kolejności”.