日期:2014-05-17  浏览次数:20378 次

有点难,反射相比较两个数据类
需求:日志记录两个类的不同值。
 
两个相同的Product 类(B是A的子类), 我要将两个Product类全部的属性值,包括它的全部子类的属性一一相比较,看看这两个Product类中哪些属性的值不同,然后将不同的属性以及它的值通过字符串或者其他方式返回。
最好Product类的属性上有特性,标识该属性名称及是否比较,这样记录的时候更方便一些。
比如: class A { public string name ; public list<B> lstinfo; }
class B{ public string InfoName; }

注意: 访方法是通用的,数据类型不单单是Product 类, 应该要通过反射来完成。

------解决方案--------------------
是啊,得用反射,而且需要递归。
有些属性还不好比较,比如list集合,怎么样才算相同呢?

所以把这个做成“通用”根本不是好的设计。

你应该让能比较的类去实现IEquatable接口,告诉调用者,这是可以比较的。并且明确比较的规则。
------解决方案--------------------
反射遍历下就行了 list集合我感觉 没必要在深究 因为就算是都叫LIST<XX> XX的命名空间也不不一样的所以可以直接列出来用不着递归只要一级就行了