首页 > 解决方案 > Object.Equals 返回 false

问题描述

Object.Equals 总是返回 false,为什么不等于?

Student student = new Student(3, "Jack Poly");
Student otherStudent = (Student)student.Clone();
if (Object.Equals(student, otherStudent))
{
    Console.WriteLine("Equal");
}
else
 {
    Console.WriteLine("Not Equal");
 }

克隆方法如下

    public override StudentPrototype Clone()
    {
        return this.MemberwiseClone() as StudentPrototype;
    }

标签: c#oopprototypeclone

解决方案


看这篇文章MSDN

如果当前实例是引用类型,则 Equals(Object) 方法测试引用相等性,并且对 Equals(Object) 方法的调用等效于对 ReferenceEquals 方法的调用。引用相等意味着被比较的对象变量引用同一个对象。

YourStudent是一个引用类型,克隆MemberwiseClone返回一个新的 other object

Student student = new Student(3, "Jack Poly");
Student otherStudent = (Student)student.Clone();

所以Equal必须返回false


推荐阅读