List.Distinct() – 银光 – 博客园

来源: List.Distinct() – 银光 – 博客园

class ListDistinctDemo
{
static void Main(string[] args)
{
List<Person> personList = new List<Person>(){
new Person(3),//重复数据
new Person(3),
new Person(2),
new Person(1)
};

//使用匿名方法
List<Person> delegateList = personList.Distinct(new Compare<Person>(
delegate(Person x, Person y)
{
if (null == x || null == y) return false;
return x.ID == y.ID;
})).ToList();

delegateList.ForEach(s => Console.WriteLine(s.ID));

//使用 Lambda 表达式
List<Person> lambdaList = personList.Distinct(new Compare<Person>(
(x, y) => (null != x && null != y) && (x.ID == y.ID))).ToList();

lambdaList.ForEach(s => Console.WriteLine(s.ID));

//排序
personList.Sort((x, y) => x.ID.CompareTo(y.ID));
personList.ForEach(s => Console.WriteLine(s.ID));

}
}
public class Person
{
public int ID { get; set; }
public string Name { get; set; }

public Person(int id)
{
this.ID = id;
}
}

public delegate bool EqualsComparer<T>(T x, T y);

public class Compare<T> : IEqualityComparer<T>
{
private EqualsComparer<T> _equalsComparer;

public Compare(EqualsComparer<T> equalsComparer)
{
this._equalsComparer = equalsComparer;
}

public bool Equals(T x, T y)
{
if (null != this._equalsComparer)
return this._equalsComparer(x, y);
else
return false;
}

public int GetHashCode(T obj)
{
return obj.ToString().GetHashCode();
}
}

分享到:更多 ()