如果我有一个复杂的对象,那么编写代码来比较2个实例以查看它们是否相同的最佳实践模式是什么
答案 0 :(得分:18)
实现IEquatable接口。这定义了一种通用方法,值类型或类实现该方法以创建特定于类型的方法以确定实例的相等性。不要忘记重写Equals(对象)。 更多信息:
答案 1 :(得分:2)
我认为答案非常依赖于问题。例如,您可能希望仅在所有属性都相同时才考虑对象。这可能是每个对象没有唯一标识属性的情况。如果存在唯一标识该类型的每个对象的此类属性(或多个属性),例如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(),以便等效对象的哈希码相同。这将确保使用哈希代码确定重复键的数据结构在将对象用作键时正常工作。
答案 2 :(得分:0)
由于您提到了复杂对象,请确保复杂对象中的所有复合对象都实现了tvanfosson所提到的equals(Object)。最后,利用所有复合对象的等于
,在Complex对象中实现equals