比较两个对象。

如果我有一个复杂的对象,那么编写代码来比较2个实例以查看它们是否相同的最佳实践模式是什么

实现IEquatable接口。 这定义了一个通用方法,值类型或类实现该方法以创建特定于类型的方法来确定实例的相等性。 不要忘记重写Equals(对象)。 更多信息:

http://msdn.microsoft.com/en-us/library/ms131187.aspx

我认为答案是高度依赖问题的。 例如,您可能希望仅在所有属性都相同时才考虑对象。 这可能是每个对象没有唯一标识属性的情况。 如果存在唯一标识该类型的每个对象的此类属性(或多个属性),例如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)。 最后,利用所有复合对象的等于在Complex对象中实现equals