我有一个案例,可以通过多种不同的方式比较两个对象是否相等。例如:
public class HeightComparer : IEqualityComparer<Person> {
public bool Equals(Person x, Person y) {
return x.Height.Equals(y.Height);
}
public int GetHashCode(Person obj) {
return obj.Height;
}
}
我将这些比较器Dictionary<Person,Person>(IEqualityComparer<Person>)
用于各种方法。您将如何制作一个保证每个人都是独一无二的比较器?我想出了以下方法,但它运行缓慢,因为 GetHashCode() 方法通常返回相同的值。
public class NullPersonComparer : IEqualityComparer<Person> {
public bool Equals(Person x, Person y) {
return false; // always unequal
}
public int GetHashCode(Person obj) {
return obj.GetHashCode();
}
}
0
我可以返回与from相同的值,GetHashCode(Person obj)
但填充字典的速度仍然很慢。
编辑
这是一个用例:
Dictionary<Person, Person> people = new Dictionary<Person, Person>(comparer);
foreach (string name in Names)
{
Person person= new Person(name);
Person realPerson;
if (people.TryGetValue(person, out realPerson))
{
realPerson.AddName(name);
}
else
{
people.Add(person, person);
}
}