Liste<T>.Distinct() en C# - plusieurs critères pour EqualityComparer?
J'ai une collection d'objets qui ont plusieurs propriétés dans chacun d'eux. J'ai souvent besoin d'obtenir une liste de valeurs distinctes pour de nombreuses propriétés dans cette collection. Si j'en œuvre IEqualityComparer sur ce type , il me donne un seul critère pour obtenir les différents objets de la collection. Comment puis-je obtenir pour être en mesure d'appeler Distinctes sur plusieurs critères pour cette collection ?
Par exemple ,
class Product {
string name ;
string code ;
string supplier ;
//etc
}
Imaginer une liste de ces objets produit.
Parfois , je veux avoir la liste des noms distincts dans la liste , et à certains oter temps , une liste des différents fournisseurs . etc.
Si je l'appelle Distinctes sur une liste de ces produits , basés sur la façon dont IEqualityComparer est mis en œuvre , il sera toujours utiliser les mêmes critères , ce qui ne va pas servir ma raison d'être.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le Distinct() surcharge qui accepte un IEqualityComparer argument.
Simplement fournir différents
IEqualityComparer
implémentations pour les différents appels àDistinct
. Notez la différence entreIEquatable
etIEqualityComparer
- généralement un type ne devrait pas mettre en œuvreIEqualityComparer
pour lui-même (doncProduct
ne pas mettre en œuvreIEqualityComparer<Product>
). Vous auriez différentes implémentations, comme ProductNameComparer, ProductCodeComparer etc.Cependant, une autre alternative est d'utiliser
DistinctBy
dans MoreLINQVous pouvez également créer un comparateur qui accepte les arguments de la fonction pour les méthodes Equals et GetHashCode. Quelque chose comme
...