zoukankan      html  css  js  c++  java
  • c#中Equals方法和GetHashCode

    c#中,一般来说,重写了Equals方法,就要重写GetHashCode

    关于Equals方法,一般都会按照自己的需求编写

    关于GetHashCode,MS说的很清楚

    • 两个相同的对象(即Equals方法返回true)必须返回相同的hash code
    • 两个不相同的对象,返回true或者false都可以

    如果两个相同的对象,hash code返回false了,结果会怎么样?

        class Program
        {
            static void Main(string[] args)
            {
                var stu1 = new Student(1, "Zhangsan");
                var stu2 = new Student(2, "Lisi");
                var stu3 = new Student(1, "Zhangsan-rename");
    
    
                var dic = new Dictionary<Student, string>();
                dic[stu1] = "aaa";
                dic[stu2] = "bbb";
                dic[stu3] = "ccc";
            }
        }
    
        public class Student
        {
            public Student(int id, string name)
            {
                Id = id;
                Name = name;
            }
    
            public int Id { get; set; }
            public string Name { get; set; }
    
            public override bool Equals(object obj)
            {
                return obj is Student student && this.Id == student.Id;
            }
    
            public override int GetHashCode()
            {
                //return DateTime.Now.Millisecond;
                return this.Id;
            }
        }

    如上面代码,现在相同的对象一定返回相同的hashcode,因为他们的Id 相同,可以查看字典的元素

    字典只有两个元素,因为stu1和stu2是同一个对象,只能代表一个键

    如果修改成这样的代码

            public override int GetHashCode()
            {
                return DateTime.Now.Millisecond;
                //return this.Id;
            }

    现在的结果变成了3个元素,原因是stu1和stu2的哈希值不相同,就不需要再比较Equals方法的结果了

  • 相关阅读:
    CPU深度学习模型推理性能抖动问题
    深度学习推理性能优化
    Winograd Convolution 推导
    Res-Family: From ResNet to SE-ResNeXt
    CPU二则
    CPU TFLOPS 计算
    深度学习专题
    计算系统中互联设备Survey
    深度学习框架演进史
    天池医疗AI大赛支持有感
  • 原文地址:https://www.cnblogs.com/chenyingzuo/p/15308074.html
Copyright © 2011-2022 走看看