Esiste una raccolta in C # che non ti consente di aggiungere elementi duplicati? Ad esempio, con la stupida classe di
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);
}
}
Il codice seguente genererà (ovviamente) un'eccezione:
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);
Ma esiste una classe che garantirà allo stesso modo l'unicità, ma senza KeyValuePairs? Pensavo di HashSet<T>
farlo, ma dopo aver letto i documenti sembra che la classe sia solo un'implementazione impostata ( vai a figura ).
HashSet<T>
è insufficiente?
Dictionary<K,V>
classe non garantisce alcun tipo di ordine.
HashSet<T>.Add
metodo e lancia quando false
...
HashSet<T>
. MSDN dice "La classe HashSet <T> fornisce operazioni sugli insiemi ad alte prestazioni. Un insieme è una raccolta che non contiene elementi duplicati e i cui elementi non sono in un ordine particolare".