代码改变世界

自定义比较方法IEqualityComparer的运用

2010-09-04 17:43  pxeric  阅读(246)  评论(0)    收藏  举报

今天在项目中就遇到一个这样的问题,当我把两个集合连接在一起并且想去除重复项时,利用.Distinct()无效,它出现的还是重复项。查了下资料,办法是自定义一个比较方法,如下:

代码
List<Student> list = new List<Student>();
  Student a 
= new Student
  {
         UserId 
= 1,
         StudentName 
= "Eric"

  };
  Student b 
= new Student
  {
         UserId 
= 1,
         StudentName 
= "Eric"

  };

  Student c 
= new Student
  {
         UserId 
= 2,
         StudentName 
= "laoyi"

  };
  list.Add(a);
  list.Add(b);

  list.Add(c);
  var tt 
= list.Distinct(new StudentComparer());
 

public class Student
{
  
public int UserId { getset; }
  
public string StudentName { getset; }
}
 

自定义的比较类:
public class StudentComparer : IEqualityComparer<Student>
{
  
public bool Equals(Student x, Student y)
  {
         
return x.UserId.Equals(y.UserId);
  }

  
public int GetHashCode(Student obj)
  {
         
return obj.UserId.GetHashCode();
  }
}

 

 

上述实例是排除ID相等的。