C# LINQ去重复杂类型对象集合

时间:2022-09-03 17:13:37

通过使用LINQ方法语法中的Distinct(),可以去重简单类型集合,如:int、string等。

但如果要去重复杂类型集合,那么 直接调用Distinct()方法是不行的。幸运的是,Distinct()方法可以添加自定义比较方式,简单类型的去重无非就是类型比较,因为类型简单索性.NET就帮我们直接实现了,但复杂类型就不行了,一般复杂类型都是自定义的,比如类、结构体等,对此我们只需要自己实现一个继承IEqualityComparer<T>接口的比较方法,然后添加到Distinct()中即可。

上代码:

自定义复杂类型:

class Student
{
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;
}
}

实现继承IEqualityComparer<T>接口的比较方法:

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