该问题源于数据库表比较。比方说,我们将Left行放入实例Left并将右侧放入同一类型的Right实例中。我们还有许多表格和相应的类型。通用对象比较比较例程
如何实现或多或少的泛型例程,导致差异集合例如
propertyName,leftValue,rightValue每个这样的一对相同类型的实例。 除了通用比较算法,因为leftValue和rightValue可以是任何东西(一对字符串或int或DateTime或Guid)并不明显,如何将一个集合中的所有内容合并在一起。
编辑:
class OneOfManyTypesBasedOnTableRow
{
Guid uid,
int anotherId,
string text1,
string text2,
DateTime date1,
DateTime date2
}
class AnotherOfManyTypesBasedOnTableRow
{
Guid uid,
int anotherId,
string text3,
string text4,
DateTime date3,
DateTime date4
}
//For type 1
OneOfManyTypesBasedOnTableRow Left = new Something().GetLeft() ;
OneOfManyTypesBasedOnTableRow Right = new Something().GetRight() ;
DiffCollection1 diff1 = comparer.GetDiffForOneOfManyTypesBasedOnTableRow (Left , Right) ;
//For type 2
AnotherOfManyTypesBasedOnTableRow Left = new SomethingElse().GetLeft() ;
AnotherOfManyTypesBasedOnTableRow Right = new SomethingElse().GetRight() ;
DiffCollection2 diff2 = comparer.GetDiffForAnotherOfManyTypesBasedOnTableRow (Left , Right) ;
我的问题是,我不知道如何避免为每个类型非常相似的代码重复。对象群体可能没关系。但在差异方法我必须代码
if Left.Text1.Equals (Right.Text1)
等在一个方法
if Left.Text3.Equals (Right.Text3)
等其他方法
你可以把一些伪代码描述这个。 – 2010-05-12 11:54:16
我做的一件事就是创建一个返回值为“重要”的值列表的方法。然后我使用该列表(而不是实际的)对象来比较平等并生成一个哈希。这与Mathew的回答中提到的稍微更加自动化的过程类似,但将“导入字段”选择置于对象的手中(我猜也可以使用属性)。使用接口和静态帮助程序或扩展方法可以很容易地在多个对象上轻松完成此操作 - 每个类应少于8行代码。 – 2011-01-15 21:30:10