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(); } }