C# 比较两个物体。

C# 比较两个物体。,c#,C#,如果我有一个复杂的对象,那么编写代码来比较两个实例以查看它们是否相同的最佳实践模式是什么。这定义了一个值类型或类实现的通用方法,用于创建用于确定实例相等性的特定于类型的方法。也不要忘记覆盖Equals(对象)。 更多信息请点击此处: 我认为答案与问题高度相关。例如,只有当所有属性相等时,才可能考虑对象是相等的。这可能是每个对象都没有唯一标识属性的情况。如果有这样一个(或多个)属性(例如ID或ID和版本)唯一地标识该类型的每个对象,那么您可能只希望基于该属性(或多个属性)进行比较 然而,基本模式应

如果我有一个复杂的对象,那么编写代码来比较两个实例以查看它们是否相同的最佳实践模式是什么。这定义了一个值类型或类实现的通用方法,用于创建用于确定实例相等性的特定于类型的方法。也不要忘记覆盖Equals(对象)。 更多信息请点击此处:


我认为答案与问题高度相关。例如,只有当所有属性相等时,才可能考虑对象是相等的。这可能是每个对象都没有唯一标识属性的情况。如果有这样一个(或多个)属性(例如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提到的相等(object)。最后,在复杂对象中实现equals利用所有复合对象的equals

这与iComparableequalable有何不同?equalable只会告诉您它们是否相同。IComparable将为您提供相对顺序。对于未排序但可相等的对象(例如图像),不能使用IComparable.is.Equals()与==?不,不能使用。这是一个简单的参考比较。这里的更多信息:更多信息,它进行简单的引用比较,除非重写==运算符