在下面的例子中找到使变量相等的解
本文关键字:变量 在下面 | 更新日期: 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
呢?
您必须覆盖Equals
和GetHashCode
,否则只比较引用:
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) {
...
}
通常最好从最简单的解决方案开始,然后再深入研究更复杂的方法,你可能会发现这就是你所需要的。