比较两个已知的复杂类型对象而不使用反射

时间:2016-03-16 10:04:48

标签: c#

我有两个相同类型的已知复杂对象,或者两个具有完全相同属性的两个不同类的对象。 如何使用反射或手动属性比较来比较两个对象的属性。

2 个答案:

答案 0 :(得分:4)

简单地说,你不能......除非对象已经实现了Equals方法:-)没有神奇的仙女可以比较.NET中的对象。

从技术上讲,还有第三种方式......它完全违背你的字面意思,但通常被认为是“可接受的”:写一个T4模板,使用反射,生成一个包含比较器的.cs文件(使用手动属性比较来比较对象)。 T4在编译时运行,生成的.cs在编译时生成(并编译),因此在运行时没有反射,并且没有“人工书写”手动属性比较。

请注意,正确执行此T4模板非常复杂......它是项目中的项目!
有很多方法可以做到这一点,每个方法都有其缺陷。只是决定要比较什么(字段或属性)就足够了。对于字段/属性,您是否希望将所有内容与一个选项进行比较以排除某些内容,或者没有任何选项可以包含您真正想要比较的内容?然后决定如何处理集合(你想比较它们的元素吗?)。许多决定要采取!

答案 1 :(得分:2)

正如xanatos上面所说,你不能,但有bunch of widgets已经为你做了这个。

例如:https://github.com/StevenGilligan/AutoCompare