Quelqu'un pourrait-il expliquer comment On dit qu'il fusionne deux séquences et supprime des doublons. em> p> mais Puis-je personnaliser en quelque sorte le comportement de suppression en double - disons si je souhaite utiliser l'élément de ou même si je souhaite en quelque sorte combiner ces valeurs dans la séquence qui en résulte? p> Comment cela devrait-il être mis en œuvre? EM> P> Je suppose que j'ai décrit le problème de manière incorrecte, disons que nous avons une valeur: p> et le comparateur utilisé effectue un et disons que parfois je sais que je devrais prendre l'élément de la deuxième séquence, car il est Quoi qu'il en soit, je voudrais utiliser la section merci p> p> Union code> dans Linq fonctionne?
la deuxième séquence code> en cas de duplicata ou de
la première séquence p>. P>.
Mise à jour < / h2>
x.name == y.name code> chèque. p>
quel que soit le champ code> est plus récent / meilleur que la
quel que soit le champ code> de la première séquence. P>
séquence1.Union (Séquence2) code> ou
séquence2.Union (Séquence1) Code> Variation des méthodes. fort> p>
3 Réponses :
Si les éléments sont des duplicats, cela n'a pas d'importance, quelle liste qu'ils sont extraites - à moins que votre comparateur d'égalité ne prenne toutes les propriétés de l'élément en tenant compte du cours. P>
S'ils ne sont pas vraiment duplicats, ils apparaîtront tous les deux dans l'union résultante. P>
de vos nouvelles informations au minimum, vous devez écrire un nouvel opérateur d'égalité qui prend à l'extrême, vous devrez écrire votre propre méthode d'extension union code> union code> qui vous fait pour vous. P> quel que soit le compte code>. Vous ne pouvez pas simplement utiliser
séquence1.Union (séquence2) code> ou
séquence2.Union (Séquence1) Code> Sauf si Tous forts> Les éléments veulent prendre une séquence ou l'autre. p>
Cela dépend de la façon dont vous définissez l'égalité ... Si le type implémente Iequatable
@Thomas - cela a été impliqué dans ma réponse. Peut-être que je devrais le rendre explicite.
@Thomas - Mon édition a été invitée par votre commentaire mais dans la fenêtre de 5 minutes;)
Vous pouvez utiliser second.union (premier) code> au lieu de
premier.Union (deuxième) code>. De cette façon, il conservera les éléments de
deuxième code> plutôt que les éléments de
premier code>. P>
Lorsque l'objet renvoyé par cette méthode est énuméré, Union énumère d'abord et deuxième dans cet ordre et donne chaque élément qui n'a pas encore été donné.
http://msdn.microsoft.com/en-us/library/bb341731.aspx < / p> blockQuote>de sorte que les éléments de la séquence que vous utilisez comme paramètre gauche prennent la priorité sur les éléments du paramètre droit. P>
La chose importante à ce sujet est que c'est bien défini et documenté le comportement et non seulement un détail de mise en œuvre pouvant changer dans la prochaine version de .NET. P>
comme une note latérale lorsque vous implémentez un
IequalityComparer
code> Il est important d'utiliser cohérent égale code> et
gethashcode code>. Et dans ce cas, je préfère approfondir explicitement un comparateur d'égalité à la méthode de l'Union au lieu d'avoir le
égal code> de l'objet lui-même renvoyer
true code> pour des objets qui ne sont pas identiques à tous les fins . p>
Merci, ceci est l'information requise: spécifiquement, la confiance que ce qui aurait pu être "comportement mystérieux noire" est en fait documenté et ne changera pas sans fanfare - vraisemblablement, ne changera pas du tout.