从重写概念开始,我重写方法Equals和GetHashCode.
主要是我想出了这个"非常简单的代码":
internal class Person
{
public string name;
public int age;
public string lname;
public Person(string name, int age, string lname)
{
this.name = name;
this.age = age;
this.lname = lname;
}
public override bool Equals(object obj)
{
var person = obj as Person;
if (person != null)
{
return person.age == this.age && person.name == this.name && person.lname == this.lname;
}
return false;
}
public override int GetHashCode()
{
return this.age.GetHashCode() * this.name.GetHashCode() * this.lname.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这很有效,但我的"共同开发者"Mr.Resharper给了我一些建议:
return this.age.GetHashCode() * this.name.GetHashCode() * this.lname.GetHashCode();
Bal*_*ick 23
总结一下评论中讨论的内容:
Hashing旨在为给定对象提供一个不会发生变化的值,无论发生什么变化 - 因此最好只依赖于GetHashCode方法中的只读字段.
首先,我会建议把name和lname外地只读的,因为他们可能在你的使用方案没有改变.
至于age这是经常变化的东西,所以最好存储一个DateTime永不改变的出生日期.然后你也可以把它做成只读.