反射是比较同一类型的两个对象的更好方法吗?

时间:2012-08-01 09:32:50

标签: c# wpf reflection

背景:

我有2个相同类型的对象实例。一个对象填充了我连接的设备的配置,另一个对象填充了我存储在硬盘驱动器上的配置版本。

用户可以更改任何一个,因此我想比较它们并向用户显示差异。

每个对象都包含许多ViewModel属性,所有属性都扩展为ViewModelBase,这是我想要比较的属性。

问题:

这是比我即将提出的更好的方法。

我正在考虑使用Reflection检查对象中的每个属性,对于每个扩展ViewModelBase的属性,我将遍历每个属性。对于任何不同的,我会将名称和值放入列表中,然后将其呈现给用户。

我不知道发明这个轮子,我想知道这是否是一个以前解决过的问题?有没有更好的方法来完成它?

3 个答案:

答案 0 :(得分:3)

根据要比较的属性数量,手动检查将是更有效的选项。但是,如果你有很多属性或希望检查是动态的(即你只是添加新的属性并且它自动运行),那么我认为Reflection是去这里的方法。

答案 1 :(得分:2)

为什么不为你的类型实现equals运算符呢?

http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

编辑:仔细阅读后,我看到你实际要问的是进行实际比较的最有效方法是什么。

通过反射来实现它可以节省代码,但速度较慢。使用大量手动比例进行操作相当快,但代码更多。

答案 2 :(得分:0)

如果你在好的方式中相当谦虚和懒惰。您可以混合两种解决方案的好处。借助cci之类的工具,您可以发出比较属性的方法。这样做的好处在于您的反射代码将在编译时执行,让您使用strait forward方法在运行时执行。这允许您根据需要更改模型,而不用担心比较代码。这有一个缺点,那就是学习cci,这是非常具有挑战性的。