如何检查对象是否等于同一类的新对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (80)

如果我有这样的对象:

public class Person
{
    public int id {get;set;}
    public string name {get;set;}
}

我想要这种行为:

Person a = new Person();
Person b = new Person();

a == b;

如果a=b返回true,我是否必须重写Object.Equals()方法?或者,在不覆盖Equals方法的情况下,还有其他方法可以做到这一点吗?

EDIT

我想比较数据,因为我想知道我调用的外部方法是否返回一个新对象或一个与新对象不同的数据对象。

提问于
用户回答回答于

您想要重载==运算符。因此,您还应该Equals先覆盖。如果你覆盖Equals你应该总是覆盖GetHashCode。如果您重载==操作员,您还必须重载!=操作员:

public class Person
{
    public int id {get;set;}
    public string name {get;set;}

    public override bool Equals(object obj)
    {
        Person p2 = obj as Person;
        if (object.ReferenceEquals(null, p2)) return false;
        return id == p2.id;
    }

    public static bool operator ==(Person p1, Person p2)
    {
        if (object.ReferenceEquals(null, p1))
            return object.ReferenceEquals(null, p2);
        else if (object.ReferenceEquals(null, p2))
            return false;
        return p1.Equals(p2);
    }

    public static bool operator !=(Person p1, Person p2)
    {
        if (object.ReferenceEquals(null, p1))
            return !object.ReferenceEquals(null, p2);
        else if (object.ReferenceEquals(null, p2))
            return true;
        return !p1.Equals(p2);
    }

    public override int  GetHashCode()
    {
        return id ;
    }
}

现在,这将比较值(the id)而不是仅引用:

Person p1 = new Person { id = 1, name = "Jeff" };
Person p2 = new Person { id = 2, name = "Tim" };
bool equalPersons = p1 == p2; // false
Person p3 = new Person { id = 1, name = "Jeff 2.0" }; // same id -> equal
equalPersons = p1 == p3; // true

MSDN:实现等于和平等运算符的指南(==)

热门问答

对象存储, 版本控制,没有提供对象的历史版本列表的查询API吗?

serverless db 如何管理?

Richel码农
推荐
1.支持pg_dump,psql工具进行数据导入和导出。 2.本地CLI,可以使用postgresql的客户端psql,也可以使用dbeavr,navicate,pgadmin等工具访问。 3.支持操作DB ,要自己写逻辑 ... 展开详请

腾讯云何时会有域名交易系统?

腾讯云域名与DNS解析团队域名、解析产品经理
推荐

安卓APP使用免费版加固后,在Android11系统上运行闪退,是什么原因?

hello,目前已经适配了Android R Beta1,预计这周内上线移动应用安全在线版,请留意日志更新

mysql安装后修改默认密码问题?

推荐已采纳
您好,可以先配置免密登录数据库,将密码修改后再关闭免密登录即可,下面介绍简要步骤: 1. 获得服务器超级管理员权限,然后先停止mysql服务 2. 修改mysql启动参数文件,文件一般在 /etc/my.cnf (linux)在[mysqld]的段中加上一句:skip-gra...... 展开详请

配置 https 配置完后报错?

女淘日记

杭州吱吱吱科技 · 站长 (已认证)

推荐已采纳

请检查服务器是否安装了代理?如有请尝试移除代理再尝试

另外,curl访问https时候需要确保服务器已经保存了证书,可以通过 curl -k --tlsv1 过滤

所属标签

扫码关注云+社区

领取腾讯云代金券