[英]Equality comparing objects
我有这样的代码:
public bool AreSame(CreditProposal creditProposal)
{
if (!ContractingParty.Equals(creditProposal.ContractingParty))
return false;
if (!UltimateParent.Equals(creditProposal.UltimateParent))
return false;
if (!Rebound.Equals(creditProposal.Rebound))
return false;
if (!ContactPerson.Equals(creditProposal.ContactPerson))
return false;
if (!DateOfVisit.Equals(creditProposal.DateOfVisit))
return false;
.... and so on 10 more times
有没有一种方法可以更简洁? 还是那意味着我进入反思地狱?
处理这种情况的本能方法是重写Object.Equals(Object)
方法并为您的类型实现IEquatable<T>
。
但是,重写Object.Equals
将提示您也重写Object.GetHashCode()
,这很难正确完成。 最值得注意的是,每次在同一实例上调用GetHashCode()
必须返回相同的值,并且对于被视为相等的两个对象,必须返回相同的值。 如果您的类型是易变的,这将成为真正的痛苦。 (实际上, GetHashCode()
很难正确实现,在StackOverflow上有一个完整的标签: https ://stackoverflow.com/questions/tagged/gethashcode)
Equals
的静态实现通常如下所示:
public static bool Equals(CreditProposal proposalA, CreditProposal proposalB)
{
// Check whether both values are null.
if(object.ReferenceEquals(proposalA, null)
&& object.ReferenceEquals(proposalB, null))
{
return true;
}
// Check whether either value is null.
if(object.ReferenceEquals(proposalA, null)
|| object.ReferenceEquals(proposalB, null))
{
return false;
}
// Check whether hashcodes are different.
if(proposalA.GetHashCode() != proposalB.GetHashCode())
{
return false;
}
// Check for value equality.
return Party.Equals(
proposalA.ContractingParty,
proposalB.ContractingParty)
&& ParentProposal.Equals(
proposalA.UltimateParent,
proposalB.UltimateParent);
// Add more conditions for equality here.
}
您将从所有实例方法中调用此实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.