2009-10-05 5 views
0

J'ai une liste <> d'objets HTMLAnchor (HTMLAnchor est un objet provenant d'une API externe). Je veux exclure en cliquant sur certains liens comme ils sont pour se déconnecter, etc.Utilisation de la méthode Except <> de LINQ avec un objet provenant d'une API externe

En utilisant LINQ, je peux utiliser l'opérateur Except. Cependant, ici (http://msdn.microsoft.com/en-us/vcsharp/aa336761.aspx#except1), l'exemple utilisant le type personnalisé (Produit si je me souviens bien) n'utilise pas la version surchargée de Except.

De plus, si j'utilise un type que je n'ai pas défini, les règles changent-elles? Et si la classe que j'écris pour implémenter IEquality a le même nom que j'essaie d'exclure dans ma collection générique (HtmlAnchor)?

Merci

Répondre

1

Si vous voulez comparer les ancres en utilisant la méthode Equals par défaut, qui dans ce cas va probablement vous donner référence à l'égalité, vous ne avez pas besoin de faire quoi que ce soit: il suffit de passer l'ensemble des points d'ancrage à exclure:

anchors.Except(anchorsToExclude); 

Si les membres de la séquence à exclure ne sont pas égaux à la référence (ou que HtmlAnchor.Equals les considère comme égaux), l'interface que vous souhaitez implémenter est IEqualityComparer<T>. Cela existe précisément pour vous permettre de fournir une comparaison d'égalité personnalisée pour un type que vous ne définissez pas, donc les règles ne changent pas - il vous suffit d'utiliser la surcharge appropriée de Except.

Vous créerez donc une classe appelée par ex. HtmlAnchorEqualityComparer qui implémente IEqualityComparer<HtmlAnchor> et transmet une instance de celui-ci à Except:

anchors.Except(anchorsToExclude, new HtmlAnchorEqualityComparer()) 
1

Lorsque vous ne disposez pas de contrôle sur le type et les opérations d'égalité par défaut ne suffisent pas (ie. Égale est pas correctement mis en œuvre), vous devez utiliser the overload which takes an IEqualityComparer<T> parameter. C'est une classe que vous pouvez implémenter vous-même pour fournir la définition de l'égalité dont vous avez besoin.

Questions connexes