Existe-t-il une collection en C # qui ne vous permettra pas d'ajouter des éléments en double? Par exemple, avec la classe idiote 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);
}
}
Le code suivant lèvera (évidemment) une exception:
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);
Mais existe-t-il une classe qui garantira de la même manière l'unicité, mais sans KeyValuePairs? Je pensais HashSet<T>
faire cela, mais après avoir lu la documentation, il semble que la classe n'est qu'une implémentation d'ensemble ( allez comprendre ).
HashSet<T>
est insuffisant?
Dictionary<K,V>
classe ne garantit aucun type d'ordre.
HashSet<T>.Add
méthode et lancez quand false
...
HashSet<T>
. MSDN indique «La classe HashSet <T> fournit des opérations d'ensemble de haute performance. Un ensemble est une collection qui ne contient aucun élément en double et dont les éléments ne sont pas dans un ordre particulier».