通过使用LINQ方法语法中的Distinct(),可以去重简单类型集合,如:int、string等。
但如果要去重复杂类型集合,那么 直接调用Distinct()方法是不行的。幸运的是,Distinct()方法可以添加自定义比较方式,简单类型的去重无非就是类型比较,因为类型简单索性.NET就帮我们直接实现了,但复杂类型就不行了,一般复杂类型都是自定义的,比如类、结构体等,对此我们只需要自己实现一个继承IEqualityComparer<T>接口的比较方法,然后添加到Distinct()中即可。
上代码:
自定义复杂类型:
class Student实现继承IEqualityComparer<T>接口的比较方法:
{
private int _id;
private string _name;
public int ID
{
get{return _id;}
set{_id = value;}
}
public string Name
{
get{return _name;}
set{_name = value;}
}
public Student(int i,string s)
{
_id = i;
_name = s;
}
}
class StudentCompare: IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.ID== y.ID&& x.Name== y.Name)
{
return true;
}
else
{
return false;
}
}
public int GetHashCode(item obj)
{
if(obj == null)
return 0;
else
return obj.ToString().GetHashCode();
}
}
Distinct()中使用即可:
static void Main(string[] args)
{
List<Student> list = new List<Student>()
{
new Student() { ID = 1, Name = "Tom" },
new Student() { ID = 2, Name = "Jim" },
new Student() { ID = 1, Name = "Tom" },
new Student() { ID = 3, Name = "Jon" }
};
var temp = list.Distinct(new StudentCompare()).ToList();
foreach (var item in temp)
{
Console.WriteLine("{0} {1}",item.ID,item.Name);
}
Console.Read();
}