我有一个已经实现的类,IEquatable<T>
以便在测试时可以IEnumerable
使用以下调用轻松比较这些对象的集合:
Assert.IsTrue(expected.SequenceEqual(actual));
这目前运作良好,但我有一些挥之不去的疑问。该类如下所示:
public class ThirdPartyClaim : IEquatable<ThirdPartyClaim>
{
// fields removed for question
public bool Equals(ThirdPartyClaim compareTo)
{
if (object.ReferenceEquals(this, compareTo))
{
return true;
}
return this.ClaimId.Equals(compareTo.ClaimId) &&
this.Firstname.Equals(compareTo.Firstname) &&
this.Lastname.Equals(compareTo.Lastname);
}
public override int GetHashCode()
{
int hashClaimId = this.ClaimId == null ? 0 : this.ClaimId.GetHashCode();
int hashFirstname = this.Firstname == null ? 0 : this.Firstname.GetHashCode();
int hashLastname = this.Lastname == null ? 0 : this.Lastname.GetHashCode();
return hashClaimId ^ hashFirstname ^ hashLastname;
}
我对覆盖的理解GetHashCode()
是它用于比较指向同一类实例的对象。在这种情况下(即使在将来)极不可能需要这样做。
这种理解是否正确,如果正确,我可以安全地删除代码吗?
在我的单元测试中是否有更好的方法来比较这些对象的集合?
虽然我被限制使用 MSTest。
比