Gibt es eine Sammlung in C #, mit der Sie keine doppelten Elemente hinzufügen können? Zum Beispiel mit der dummen Klasse von
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);
}
}
Der folgende Code löst (offensichtlich) eine Ausnahme aus:
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);
Aber gibt es eine Klasse, die ebenfalls die Einzigartigkeit garantiert, jedoch ohne KeyValuePairs? Ich dachte, ich HashSet<T>
würde das tun, aber nachdem ich die Dokumente gelesen habe, scheint es, dass die Klasse nur eine festgelegte Implementierung ist ( siehe Abbildung ).
HashSet<T>
nicht ausreicht?
Dictionary<K,V>
Klasse nicht garantieren , jede Art von Ordnung.
HashSet<T>.Add
false
HashSet<T>
. MSDN sagt: "Die HashSet <T> -Klasse bietet leistungsstarke Mengenoperationen. Eine Menge ist eine Sammlung, die keine doppelten Elemente enthält und deren Elemente in keiner bestimmten Reihenfolge sind."