我从同一个类中获得两个对象,我需要逐字段比较它们。问题在于他们有近百个字段,而且手工编写这些信息是非常重要的。比较来自同一类的两个对象与字段的大小
你知道有什么办法可以这么简单吗? Java中的思考可能是一种解决方案,但在我看来,它似乎是一种破解。毕竟,我寻求一种C#解决方案。
我从同一个类中获得两个对象,我需要逐字段比较它们。问题在于他们有近百个字段,而且手工编写这些信息是非常重要的。比较来自同一类的两个对象与字段的大小
你知道有什么办法可以这么简单吗? Java中的思考可能是一种解决方案,但在我看来,它似乎是一种破解。毕竟,我寻求一种C#解决方案。
两个想法:
使用反射(这是在C#提供)运行时和循环遍历比较它们的CLAS领域。如果您希望能够排除某些字段,您可以通过创建属性类并标记不希望与该属性进行比较的字段来完成此操作。
使用反射以相同方式遍历字段并生成所需的比较代码。这样你就可以拥有“真实”的代码,但不必自己编写和维护它。属性可用于微调生成的比较代码。
最好的是重构你的代码,百场是糊涂的方式。
如果你不能,因为是遗留代码找出哪些属性使他们平等。
关于此代码需要重构没有两个意见,只是没有现在就让时间变得更加清洁吧。 而且,唉,所有的属性必须相同。 – vlood 2010-07-13 08:09:59
如果幸运的话,您将识别出一个或两个属性,这些属性对于实例是唯一的 - 特别是如果您的类表示数据库实体时 - 您只需比较这些独特的属性。
使用正则表达式查找和替换。当你必须添加字段*(删除的会导致编译错误),这是一种痛苦,但是你得到编译代码的好处。
不过,真的,考虑分裂班级。如果有100个字段,它们可以分组到组件类中吗? 100名成员需要管理很多麻烦。
.NET也有反射=) – 2010-07-13 08:03:54
类似于:http://stackoverflow.com/questions/986572/hows-to-quick-check-if-data-transfer-two-objects-have-equal-properties- in-c/986617#986617它使用反射,但将其编译为最大性能? – 2010-07-13 08:04:28
另一个相关的问题,由Flakron Bytyqi建议:http://stackoverflow.com/questions/506096/comparing-object-properties-in-c – 2010-07-13 08:07:34