J'ai 2 listes. Je veux comparer chaque élément avec chaque élément pour les deux listes en utilisant LINQ (par opposition à utiliser une boucle imbriquée). Mais, le Contient ne répond pas à mes besoins parce que j'ai besoin de faire une comparaison personnalisée. J'imagine un comparateur personnalisé est ce dont j'ai besoin mais pas sûr à 100%.Linq personnalisé contient-il?
Je ne pense pas que cela devrait être trop difficile, mais je ne sais pas exactement l'outil dont j'ai besoin pour cela. Les deux listes contiennent toutes deux des types d'objets distincts et différents.
Mise à jour:
Désolé, si je n'étais pas claire. J'ai 2 listes (ou enumerables) que je pouvais faire quelque chose comme ceci:
foreach(item i in list1)
foreach(otherItemType in List2)
{
if (CompareItem(x)) do something;
}
Ce que je veux faire quelque chose comme ceci:
var matches = myList1.Where(t => myList2.Something(t))
où quelque chose est un comparateur personnalisé, je peux peut-être passer outre la comparaison égale? Je pourrais utiliser le .Contains
mais j'ai besoin de faire ma propre logique de comparaison.
Mise à jour: J'ai pensé à utiliser le IEqualityComparer
mais il est configuré pour prendre les types de T, T et T, Y. Il peut y avoir certaines contraintes génériques que je pourrais utiliser pour résoudre ce problème. J'ai senti que cela devrait être facile/simple.
Pouvez-vous expliquer vos besoins plus ou fournir un exemple données et résultats attendus? – LukeH
Remplacez GetHashCode() de sorte que différents éléments renvoient différents codes de hachage, et que les éléments 'identiques' renvoient le même code de hachage. Ensuite, ça va fonctionner comme il se doit (je pense) – PostMan
@PostMan - vous ne devriez jamais compter sur GetHashCode() retournant des valeurs différentes pour différents items, seulement qu'il retournera toujours la même valeur pour les items considérés égaux. –