Existe uma coleção em C # que não permite adicionar itens duplicados a ela? Por exemplo, com a classe boba 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);
}
}
O código a seguir (obviamente) lançará uma exceção:
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);
Mas existe uma classe que irá garantir a exclusividade da mesma forma, mas sem KeyValuePairs? Eu pensei HashSet<T>
que faria isso, mas depois de ler a documentação, parece que a classe é apenas uma implementação definida (veja a figura ).
HashSet<T>
é insuficiente?
Dictionary<K,V>
aula não garante nenhum tipo de pedido.
HashSet<T>.Add
método e lançar quando false
...
HashSet<T>
. MSDN diz "A classe HashSet <T> fornece operações de conjunto de alto desempenho. Um conjunto é uma coleção que não contém elementos duplicados e cujos elementos não estão em uma ordem específica."