首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

二个List的数据集为何不能Except,该怎么解决

2012-03-29 
二个List的数据集为何不能Except有一个类,然后二个这个类的数据集,为何这二个数据集相减号,等不出正确答案

二个List的数据集为何不能Except
有一个类,然后二个这个类的数据集,为何这二个数据集相减号,等不出正确答案。

  class Employee
  {
  private int id;
  private string name;

  public string Name
  {
  get { return name; }
  set { name = value; }
  }
  public int Id
  {
  get { return id; }
  set { id = value; }
  }
  }

  List<Employee> emplist1 = new List<Employee>() { new Employee() { Id = 1, Name = "Scott" }, new Employee() { Id = 2, Name = "Lilly" }, new Employee() { Id = 3, Name = "Peter" } };
  List<Employee> emplist2 = new List<Employee>() { new Employee() { Id = 1, Name = "Scott" }, new Employee() { Id = 4, Name = "Kate" } };

  foreach (var r in emplist1.Except(emplist2))
  {
  Console.WriteLine("{0},{1}", r.Id, r.Name);
  }
  Console.ReadKey();





[解决办法]

C# code
  void Main(){  List<Employee> emplist1 = new List<Employee>() { new Employee() { Id = 1, Name = "Scott" }, new Employee() { Id = 2, Name = "Lilly" }, new Employee() { Id = 3, Name = "Peter" } };  List<Employee> emplist2 = new List<Employee>() { new Employee() { Id = 1, Name = "Scott" }, new Employee() { Id = 4, Name = "Kate" } };  foreach (var r in emplist1.Except(emplist2,new EmployeeComparer()))  {  Console.WriteLine("{0},{1}", r.Id, r.Name);  }   /*    2,Lilly    3,Peter   */}class Employee  {    private int id;    private string name;        public string Name    {    get { return name; }    set { name = value; }    }    public int Id    {    get { return id; }    set { id = value; }    }  }    class EmployeeComparer : IEqualityComparer<Employee>{    // Products are equal if their names and product numbers are equal.    public bool Equals(Employee x, Employee y)    {        //Check whether the compared objects reference the same data.        if (Object.ReferenceEquals(x, y)) return true;        //Check whether any of the compared objects is null.        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))            return false;        //Check whether the products' properties are equal.        return x.Id == y.Id && x.Name == y.Name;    }    // If Equals() returns true for a pair of objects     // then GetHashCode() must return the same value for these objects.    public int GetHashCode(Employee ep)    {        //Check whether the object is null        if (Object.ReferenceEquals(ep, null)) return 0;        //Get hash code for the Name field if it is not null.        int hashEmployeeName = ep.Name == null ? 0 : ep.Name.GetHashCode();        //Get hash code for the Code field.        int hashEmployeeId = ep.Id.GetHashCode();        //Calculate the hash code for the product.        return hashEmployeeName ^ hashEmployeeId;    }}
[解决办法]
http://msdn.microsoft.com/en-us/library/bb336390.aspx

热点排行