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