9
votes

Supprimer les éléments dans un ilist <> d'un autre ilist <>

Désolé de poster de telles questions de base, je suis nouveau à Linq et j'essaie de déterminer la meilleure façon de faire ce court métrage de la boucle à travers chaque IList .

J'ai 2 Ilistes <> avec des objets DTO personnalisés. Je souhaite supprimer tous les éléments correspondants de la liste qui sont dans l'autre. xxx

J'ai besoin de supprimer tous les éléments de list1 de < Code> list2 . J'ai regardé le sauf () méthode mais apparemment, j'ai besoin de mon itemsDo classe pour remplacer le gethascode et est égal à Méthodes pour que cela fonctionne, mais j'ai du mal à trouver quelques exemples de cela.

Quelqu'un pourrait-il me montrer le meilleur moyen de supprimer list1 à partir de ?

Merci à nouveau


0 commentaires

4 Réponses :


9
votes

Vous pouvez probablement utiliser la méthode sauf pour ce faire.

list2 = list2.Except(list1).ToList();


1 commentaires

Merci, j'ai fini par modifier ma classe en conséquence afin que je puisse nous sauf () ... Merci tout le monde, je suis sûr que toutes les autres solutions étaient aussi bonnes ... :)



1
votes

Hash C'est certainement un bon moyen, @jon Skeet ci-dessous Répondre à une question similaire vous fournira la solution.

Fondamentalement, la syntaxe est la suivante: xxx

Utilisation de LINQ Pour supprimer des éléments d'une liste

Espérons que cela aide.


2 commentaires

Je ne sais pas pourquoi, mais removeall () n'est pas une option pour moi ...


Ilist est l'interface qui répertorie les implements.List est utilisé pour d'autres classes de collecte. La classe de liste contient des méthodes qui peuvent ne pas être définies dans IList. Donc, en attribuant votre objet d'orginal à IList, vous n'aurez plus accès à des méthodes de liste uniques. Sauf si vous avez une raison d'utiliser IList , je vous recommande d'utiliser la liste . MSDN: msdn.microsoft.com/en-us/library/6sh2ey19.aspx < / a>



1
votes
s => list1.Contains(s)

6 commentaires

Je ne sais pas pourquoi, mais removeall () n'est pas une option pour moi ...


List.Contains n'est pas en réalité une Lambda. Bien qu'il se comporte le même ici.


J'ai mentionné que parce que je pensais qu'il est important que RemoveAll prend un prédicat, d'autant plus que les objets de l'OP pourraient ne pas avoir d'égalité / comparaison mises en œuvre.


RemoveAll n'existe que sur la liste . Si vous utilisez IList , alors vous êtes coincé sans elle.


Comme indiqué déjà, ilist ne contient pas la méthode removeall


@Coulton Les clarifications ont été une modification. La question initiale n'était pas claire et j'ai laissé la réponse ici pour que d'autres trouvent. Merci pour le bowvote de toute façon.