背景:
我有2个相同类型的对象实例。一个对象填充了我连接的设备的配置,另一个对象填充了我存储在硬盘驱动器上的配置版本。
用户可以更改任何一个,因此我想比较它们并向用户显示差异。
每个对象都包含许多ViewModel属性,所有属性都扩展为ViewModelBase
,这是我想要比较的属性。
问题:
这是比我即将提出的更好的方法。
我正在考虑使用Reflection检查对象中的每个属性,对于每个扩展ViewModelBase
的属性,我将遍历每个属性。对于任何不同的,我会将名称和值放入列表中,然后将其呈现给用户。
我不知道发明这个轮子,我想知道这是否是一个以前解决过的问题?有没有更好的方法来完成它?
答案 0 :(得分:3)
根据要比较的属性数量,手动检查将是更有效的选项。但是,如果你有很多属性或希望检查是动态的(即你只是添加新的属性并且它自动运行),那么我认为Reflection是去这里的方法。
答案 1 :(得分:2)
为什么不为你的类型实现equals运算符呢?
http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx
编辑:仔细阅读后,我看到你实际要问的是进行实际比较的最有效方法是什么。
通过反射来实现它可以节省代码,但速度较慢。使用大量手动比例进行操作相当快,但代码更多。
答案 2 :(得分:0)
如果你在好的方式中相当谦虚和懒惰。您可以混合两种解决方案的好处。借助cci之类的工具,您可以发出比较属性的方法。这样做的好处在于您的反射代码将在编译时执行,让您使用strait forward方法在运行时执行。这允许您根据需要更改模型,而不用担心比较代码。这有一个缺点,那就是学习cci,这是非常具有挑战性的。