2009-01-04 269 views
12

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

回答

15

实现IEquatable接口。这定义了一个值类型或类实现用于确定实例平等创建特定类型的方法的一般化方法。不要忘记重写Equals(对象)。 点击此处了解详情:

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

+0

的平等的优势复杂对象平等是如何从IComparable的 – leora 2009-01-04 16:51:06

+0

此不同IEquatable只会告诉你,如果他们是相同的或没有。 IComparable会给你一个相对的顺序。对于没有排序的对象,但是可以相等(例如,图像),则不能使用IComparable。 – tvanfosson 2009-01-04 16:55:09

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(),以便为等效对象的哈希码是相同的。这将确保当对象用作密钥时,使用散列代码来确定重复密钥的数据结构能够正常工作。

0

既然你提到一个复杂的对象,确保由tvanfosson提到的复杂对象的所有复合对象实现equals(对象)。最后落实把所有复合对象