C# HowTo 重写Equals和GetHashCode

直接上码:

    public class MyObject
    {
        public string name;

        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != this.GetType()) return false;
            return ((MyObject)obj).name == this.name;
        }

        public override int GetHashCode()
        {
            return (name != null ? name.GetHashCode() : 0);
        }
    }
时间: 2024-10-07 06:39:33

C# HowTo 重写Equals和GetHashCode的相关文章

编写高质量代码改善C#程序的157个建议——建议12: 重写Equals时也要重写GetHashCode

建议12: 重写Equals时也要重写GetHashCode 除非考虑到自定义类型会被用作基于散列的集合的键值:否则,不建议重写Equals方法,因为这会带来一系列的问题. 如果编译上一个建议中的Person这个类型,编译器会提示这样一个信息: “重写 Object.Equals(object o)但不重写 Object.GetHashCode()” 如果重写Equals方法的时候不重写GetHashCode方法,在使用如FCL中的Dictionary类时,可能隐含一些潜在的Bug.还是针对上一

【转】重写Equals为什么要同时重写GetHashCode

.NET程序员都知道,如果我们重写一个类的Equals方法而没有重写GetHashCode,则VS会提示警告 :"***"重写 Object.Equals(object o)但不重写 Object.GetHashCode() . 但是,为什么重写Equals一定要同时重写GetHashCode呢? 微软的解释是: GetHashCode 基于适合哈希算法和诸如哈希表的数据结构的当前实例返回一个值. 两个相等的同类型对象必须返回相同的哈希代码,才能确保以下类型的实例正确运行: HashT

List<实体类> 重复排除。重写Equals.

List<实体类> 重复排除.重写Equals. public class TempData { public string Name { get; set; } public string Tel { get; set; } public string Address { get; set; } public override bool Equals(object obj) { TempData td = obj as TempData; if (td == null) return fal

【转载】聊一聊C#的Equals()和GetHashCode()方法

首先先谈一下Equals()这个方法: Equals()方法,来自于Object,是我们经常需要重写的方法.此方法的默认实现大概是这样的: public virtual bool Equals(object obj) { if(obj==null) return false; if(GetType() != obj.GetType()) return false; Return true; } 由此可以看出,默认的实现其实比较的是两个对象的内存地址(==操作符默认比较内存地址).值类型和stri

我看C#的Equals()和GetHashCode()方法

首先先谈一下Equals()这个方法: Equals()方法,来自于Object,是我们经常需要重写的方法.此方法的默认实现大概是这样的: 1 public virtual bool Equals(object obj) 2 3 { 4 5 if(obj==null) return false; 6 7 if(GetType() != obj.GetType()) return false; 8 9 Return true; 10 11 } 由此可以看出,默认的实现其实比较的是两个对象的内存地址

Java 基础 - 如何重写equals()

ref:https://www.cnblogs.com/TinyWalker/p/4834685.html -------------------- 编写equals方法的建议: 显示参数命名为otherObject, 稍后转化成other变量 public boolean equals(Object otherObject) 检测this和otherObject是否是同一个对象的引用,是,返回true; if(this==otherObject){    return true;} 检测oth

重写equals和hashCode方法的示例

如果一个类有自己特有的"逻辑相等",且需要以此进行比较时,那么就需要重写equals方法. 在Object的规范中,重写equals方法有下面几条通用约定: 自反性. x.equals(x) == true 对称性.if   y.equals(x) == true , then  x.equals(y) == true 传递性.if   x.equals(y) == true y.equals(x) == true , then x.equals(z) == true 一致性.如果比较

java重写equals方法(重点讲解)

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求: 1.自反性:对于任何非空引用x,x.equals(x)应该返回tru

【原创】关于java对象需要重写equals方法,hashcode方法,toString方法 ,compareto()方法的说明

在项目开发中,我们都有这样的经历,就是在新增表时,会相应的增加java类,在java类中都存在常见的几个方法,包括:equals(),hashcode(),toString() ,compareto()这四个方法,对于刚刚接触java的初学者来说,对于这块可以没有更深入的了解,只是单纯意义上的复制粘贴,并没有很好的去了解.现在借用这个时间给大家说说这几个方法作用. equals: 比较两个对象相等时使用(需要配合Hashcode一起使用,在后边再进行详细解释)   hashcode: 重写has