【发布时间】:2009-01-04 16:37:25
【问题描述】:
如果我有一个复杂的对象,编写代码来比较 2 个实例以查看它们是否相同的最佳实践模式是什么
【问题讨论】:
标签: c#
如果我有一个复杂的对象,编写代码来比较 2 个实例以查看它们是否相同的最佳实践模式是什么
【问题讨论】:
标签: c#
实现 IEquatable 接口。这定义了一个通用方法,值类型或类实现该方法以创建用于确定实例相等性的特定于类型的方法。不要忘记也覆盖 Equals(object) 。 更多信息在这里:
【讨论】:
我认为答案很大程度上取决于问题。例如,您可能希望仅当对象的所有属性都相等时才认为对象相等。这可能是每个对象没有唯一标识属性的情况。如果有这样一个(或多个)属性(例如 ID 或 ID 和版本)唯一标识该类型的每个对象,那么您可能只想基于该(或多个属性)进行比较。
然而,基本模式应该是这样的:
if their references are equal (includes both null)
return true
else if one object is null
return false
else
return value based on relevant properties
请注意,如果您覆盖 Equals 运算符,您还需要覆盖 GetHashCode() 以便等效对象的哈希码相同。这将确保使用哈希码确定重复键的数据结构在对象用作键时正常工作。
【讨论】:
既然你提到了一个复杂对象,请确保复杂对象中的所有复合对象都实现了 tvanfosson 提到的 equals(Object)。最后利用所有复合对象的equals在Complex对象中实现equals
【讨论】: