¿Hay una colección en C # que no le permita agregarle elementos duplicados? Por ejemplo, con la tonta clase de
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);
}
}
El siguiente código (obviamente) lanzará una excepción:
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);
Pero, ¿hay una clase que garantice de manera similar la singularidad, pero sin KeyValuePairs? Pensé HashSet<T>
que haría eso, pero después de leer los documentos, parece que la clase es solo una implementación establecida ( figura ).
HashSet<T>
es insuficiente?
Dictionary<K,V>
clase no garantiza ningún tipo de pedido.
HashSet<T>.Add
método y lanza cuando false
...
HashSet<T>
. MSDN dice "La clase HashSet <T> proporciona operaciones de conjuntos de alto rendimiento. Un conjunto es una colección que no contiene elementos duplicados y cuyos elementos no están en ningún orden en particular".