2012-06-22 130 views
1

的两个物体之间的变化到目前为止,反射似乎只有这样才能动态检查,如果两个对象是相同的。您可以通过迭代对象的成员并检查哪些包含不同的值来完成此操作。然而,研究告诉我,用这种方式反射对性能不利。.NET 4.0:寻找一个*动态*法检测同一类型

如果有人能证实此反射是否确实不是一个很好的选择。我需要做的,也许还有其他选择吗?

请注意,无论我走哪条路线,我都需要解决方案是动态的。这意味着没有重写Equals,然后逐一比较每个属性。如果它是动态的,我可以编写一种适用于所有类型的方法。

+1

您需要优化“相同”和“性能”的定义。 – mathieu

+0

否则,我会建议您将这些对象序列化为字符串(JSON,XML ...)并比较字符串是否相等。 – mathieu

+0

反射并非黑魔法。它并不总是“缓慢”。它比一些事情慢,但有时它是正确的使用工具。 –

回答

2

反射是一种很好的方法。那么编写你自己的对象哈希方法。如果你编写一个哈希方法来查看所有需要比较的属性,并将其作为一个散列值,它应该是一个非常快速的比较。您可能也需要使用反射。对object.GetHashCode()的覆盖排序,但不考虑正在查看的引用 - 只是值。

尝试一下 - 然后再决定性能是否成问题。

+1

如果您要编写散列方法并使用反射,那么您可能只是覆盖Equals或使用反射。 – joelmdev

+0

是的......如果你需要它是动态的,那么本质上反射就是答案。 –

+0

即使两个对象哈希值相等,并不意味着所有成员都是。你可以更快地消除绝大多数的不平等,但是你无法避免使用任何形式的散列算法来进行成员平等比较。 – jswolf19