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