zoukankan      html  css  js  c++  java
  • C# Distinct去重,重写IEqualityComparer

    public class Student
        {
          public int Age { get; set; }
          public string Name { get; set; }
          public string Adress { get; set; }
        }
    

      

    List<Student> list = new List<Student>()
          { 
          new Student(){Age=21,Name="Jack",Adress="Shenzhen"},
          new Student(){Age=21,Name="Jack",Adress="GuangZhou"}
          };
          var distinct = list.Distinct(new StudentComparer());

      

    由于Distinct 直接获取对象的HashCode,用HashCode进行比较的速度比 Equals 方法更快,

    因此IEqualityComparer内部会在使用 Equals 前先使用 GetHashCode 方法,在两个对象的HashCode都相同时即刻判断对象相等。

    而当两个对象HashCode不相同时, Equals 方法就会被调用,对要比较的对象进行判断。

    由于在上例中list中的两个引用实际上是两个不同的对象,因此HashCode必定不相同

    所以要触发Equlas方法,我们需要改 GetHashCode ,让它返回相同的常量

    public class StudentComparer : IEqualityComparer<Student>
        {
          public bool Equals(Man x, Man y)
          {
            return x.Age == y.Age
              && x.Name == y.Name;
          }
     
          public int GetHashCode(Man obj)
          {
            return 1;
          }
        }
    

      

    勿忘初心,方得始终。
  • 相关阅读:
    oracle,mysql对敏感,关键字等处理
    eclipse内置tomcat启动方法
    plsql登录弹白框
    date
    linux乱码
    环境变量
    终端类型
    netstat -aon|findstr 8888 终止进程
    export
    bash环境变量读取顺序
  • 原文地址:https://www.cnblogs.com/FastAsia/p/13292878.html
Copyright © 2011-2022 走看看