2

背景:

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

用户可以更改其中任何一个,所以我想比较它们并将差异呈现给用户。

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

问题:

比我要提议的方法更好。

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

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

4

3 回答 3

3

根据要比较的属性数量,手动检查将是更有效的选择。但是,如果您有很多属性或希望检查是动态的(即您只需添加新属性并且它会自动工作),那么我认为反射是这里的方法。

于 2012-08-01T09:34:58.723 回答
2

为什么不为您的类型实现等于运算符?

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

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

通过反射来节省代码但速度较慢。通过大量手动比较来完成它相当快,但代码更多。

于 2012-08-01T09:42:41.080 回答
0

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

于 2012-08-01T10:06:38.720 回答