我一直在研究如何为自定义类的Equals方法实现重写。以以下为例:
public class Person
{
public string Id {get; set;}
public int Age {get; set;}
public bool IsAlive {get; set;}
}
I've been using Logan Franks great guide on how to do this in a structured way. In one of the comments a much simpler implementation is proposed, and I'm wondering if there are any drawbacks to it.
public override bool Equals(object person)
{
if (ReferenceEquals(person, null) return false;
if (person.GetType() != this.GetType()) return false;
Person p = (Person)person;
return (Id, Age, IsAlive).Equals((p.Id, p.Age, p.IsAlive));
}
我假设代替元组Equals运算符,我们将替换return语句,如下所示
return String.Equals(Id, p.Id)
&& Int32.Equals(Age, p.Age)
&& Boolean.Equals(IsAlive. p.IsAlive);
元组的实现似乎更快(需要更少的设置),并且由于根据文档“相等性由每个组件的默认对象相等性比较器确定”,因此不需要区分“ String.Equals”和“ Boolean.Equals”在return语句中以此类推-如果第一个参数是object属性,则将使用正确的对象比较器。它似乎不太容易维护,因为添加新属性将在两个单独的元组列表的末尾进行,而不是在return语句中添加新行,但这似乎是一个优先事项。
我很好奇我是否会错过任何缺点。