首先看一个数组结合:
List<person> list=new List<person>();
list.Add(new person{id=1,name="张三"});
list.Add(new person{id=2,name="李四"});
list.Add(new person{id=1,name="张三"});
list.Add(new person{id=3,name="王五"});
list集合已经包含“张三”这个人了,而我们只想去不重复的数据,那怎么办呢?
有些同学说可以用Distinct方法呀,但是Distinct只能判断单个类型,如List<string>,不能判断List<person>。
1.循环list集合,重新组织一个新的list。(ps:这种方法不推荐)
2.扩展Distinct方法。
如何扩展:
创建CommonEqualityComparer类
public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
{
private Func<T, V> keySelector;
public CommonEqualityComparer(Func<T, V> keySelector)
{
this.keySelector = keySelector;
}
public bool Equals(T x, T y)
{
return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));
}
public int GetHashCode(T obj)
{
return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));
}
}
public static class DistinctExtensions
{
public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
{
return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
}
}
调用:
var newList=list.Distinct(m => m.name).ToList();
这样就能筛选重复的数据。