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 J'ai 2 J'ai besoin de supprimer tous les éléments de Quelqu'un pourrait-il me montrer le meilleur moyen de supprimer Merci à nouveau p> p> IList code>.
Ilistes <> code> avec des objets DTO personnalisés. Je souhaite supprimer tous les éléments correspondants de la liste qui sont dans l'autre. P>
list1 code> de < Code> list2 code>. J'ai regardé le
sauf () code> méthode mais apparemment, j'ai besoin de mon
itemsDo code> classe pour remplacer le
gethascode code> et
est égal à code > Méthodes pour que cela fonctionne, mais j'ai du mal à trouver quelques exemples de cela. P>
list1 code> à partir de code>? p>
4 Réponses :
Vous pouvez probablement utiliser la méthode sauf pour ce faire.
list2 = list2.Except(list1).ToList();
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 ... :)
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: p> Utilisation de LINQ Pour supprimer des éléments d'une liste Espérons que cela aide. P> P>
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
s => list1.Contains(s)
Je ne sais pas pourquoi, mais removeall () n'est pas une option pour moi ...
List.Contains Code> 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
Comme indiqué déjà, ilist removeall code>
@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.
Ce que cela signifie, c'est que vous devez dire à l'exécution .NET Comment déterminer si deux instances d'une classe sont égales (par exemple, comment définir une instance d'itemDO est égale à une autre instance d'IPORTO).
Pour ce faire, la remplacement est égal à p> Si vous ne le faites pas, il ne supprimera que toutes les références de la liste qui pointent sur la même instance physique que l'autre. Vous pouvez ensuite utiliser les méthodes sauf ou removeall ou quelle autre méthode que vous décidez d'utiliser. P> Vous devrez également remplacer GetHashCode, voir le lien ci-dessous pour plus d'informations à ce sujet. P> Voir Lignes directrices pour surcharger des égaux et GetHashCode A > p> p>