該問題源於數據庫表比較。比方說,我們將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