¿Hay alguna colección en C# que no le permita agregarle elementos duplicados? Por ejemplo, con la clase de tonto¿Colección que solo permite elementos únicos en .NET?
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) 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 de igual forma se garantizar la unicidad, pero sin KeyValuePairs? Pensé que HashSet<T>
haría eso, pero después de leer los documentos parece que la clase es solo una implementación establecida (vaya figura).
No entiendo su problema con 'HashSet'. MSDN dice "La clase HashSet proporciona operaciones de conjunto de alto rendimiento. Un conjunto es una colección que no contiene elementos duplicados y cuyos elementos no están en un orden particular". –
¿Puede explicar más por qué 'HashSet' no es suficiente? –
JaredPar
@mootinator: La clase 'Dictionary' no * garantiza ningún tipo de orden. –
LukeH