Puis-je définir mon type explicite comparateur inline?

Donc .NET 3.0/3.5 nous offre avec beaucoup de nouveaux moyens de la requête, trier et manipuler des données, merci à tous neat fonctions fourni avec LINQ. Parfois, j'ai besoin de comparer les types définis par l'utilisateur qui n'ont pas intégré l'opérateur de comparaison. Dans de nombreux cas, la comparaison est vraiment simple -- quelque chose comme toto1.clé ?= foo2.clé. Plutôt que de créer un nouveau IEqualityComparer pour le type, puis-je simplement indiquer la comparaison inline à l'aide de délégués anonymes/lambda fonctions? Quelque chose comme:

var f1 = ...,
    f2 = ...;
var f3 = f1.Except(
           f2, new IEqualityComparer(
             (Foo a, Foo b) => a.key.CompareTo(b.key)
           ) );

Je suis sûr que le ci-dessus ne fonctionne pas réellement. Je ne veux pas avoir à faire quelque chose d'aussi "lourd" que l'ensemble de la classe juste pour dire que le programme de façon à comparer des pommes avec des pommes.

  • Pour tous ceux à la recherche de la réponse à la question de savoir si la langue prend en charge ce, la réponse est non. Il nécessite quelques petits malins de classes personnalisées.
  • Bizarrement, ils ajouté Comparer<T>.Create pour créer un Comparateur<T>, mais pas de EqualityComparer<T>.Create() ce dont nous avons besoin ici. Attention aussi à certaines des remarques ici que de discuter de l'opportunité de mettre en œuvre l'interface ou dériver une nouvelle classe de EqualityComparer : docs.microsoft.com/en-us/dotnet/api/...
InformationsquelleAutor Coderer | 2008-10-09