Magazine Internet

[Linq] Utiliser Distinct(IEqualityComparer)

Publié le 18 décembre 2008 par Jeremy.jeanson

Comme indiqué dans la MSDN, la Méthode Distinct dispose d'une surcharge un peu particulière car contrairement à la majorité des méthodes d' extensions associées à Linq celle-ci n' utilisent pas les expressions lambda, mais une classe. Cette classe doit hérité de IEqualityComparer<T>. Dans mon cas je souhaitait retourner une liste de propriétés distinctes différenciées par leur nom.

Cela donne le code suivant :

IEnumerable<System.Reflection.PropertyInfo> maListeFinale = toutesMesProperties
	.Distinct(new EqualityComparerProperty());
Avec mon comparateur maison :
/// <summary>
/// Classe servant à la comparaison
/// </summary>
public class EqualityComparerProperty
	: IEqualityComparer<System.Reflection.PropertyInfo>
{
    /// <summary>
    /// Egalité
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool Equals(System.Reflection.PropertyInfo x, System.Reflection.PropertyInfo y)
    {
        return x.Name == y.Name;
    }

    /// <summary>
    /// HashCode de l'élément servant à la comparaison
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public int GetHashCode(System.Reflection.PropertyInfo obj)
    {
        return obj.Name.GetHashCode();
    }
}

Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte