在下面的例子中找到使变量相等的解

本文关键字:变量 在下面 | 更新日期: 2023-09-27 18:10:01

var s1=new Student{ id=1,name="Sachin" }
var s2=new Student{ id=1,name="Sachin" }

问题是如果s1等于s2,那么答案将是false,但是如何使s1等于s2呢?

在下面的例子中找到使变量相等的解

您必须覆盖EqualsGetHashCode,否则只比较引用:

public class Student
{
    public int Id { get;  set; }
    public string Name { get;set; }
    public override bool Equals(object obj)
    {
        Student s2 = obj as Student;
        if (s2 == null) return false;
        return this.Equals(s2);
    }
    public bool Equals(Student s)
    {
        if (s == null) return false;
        return Id == s.Id && Name == s.Name;
    }
    public override int GetHashCode()
    {
        unchecked
        {
            int hash = 17;
            hash = hash * 23 + Id;
            hash = hash * 23 + Name.GetHashCode();
            return hash;
        }
    }
}

在这个例子中,两个学生只有在id和名字都相等的情况下才相等。

实际上没有必要重载Equals(Student)并覆盖GetHashCode。但强烈建议这样做。阅读:重载Equals()指南

假设您的ID字段在所有用户之间是唯一的,为什么不使用它作为相等性检查?

if (s1.id == s2.id) {
   ...
}

通常最好从最简单的解决方案开始,然后再深入研究更复杂的方法,你可能会发现这就是你所需要的。