2015-01-09 111 views
2

我已經通過stackoverflow搜索並找到許多答案來比較兩個複雜的對象在Visual Studio(特別是VB.NET),但沒有找到任何適合我的東西。比較兩個複雜的對象

我的對象包含40多個不同數據類型的屬性(整數,雙精度,雙精度列表,字符串列表等),並且可以在程序更新的任何時候添加其他屬性,因此使用反射來手動輸入每個屬性名稱對我無用。

具體這是怎樣的兩個對象是有組織

Obj1 = New List(of CustomClass) 
Obj2 = New List(of CustomClass) 

的 「CustomClass」 擁有超過40屬性,如: OBJ1是OBJ 2 對象:

Dim _Color1 as Color 
Dim Prop1 as New List(of String) 
Dim _Event1 as New List(of List(of String)) 
... 

我已經嘗試使用(Obj1,Obj2) Obj1.equals(Obj2)

即使Obj1和Obj2包含s Ame值,他們仍然評估爲假。

我也試過:

For Each ObjSub as CustomClass in Obj1 
    If Obj2.Contains(Obj1) = True Then 

    End If 
Next 

但也。載計算結果爲假,即使OBJ1和OBJ2包含相同的值。

有什麼辦法只比較Obj1和Obj2中的值,而不必輸入所有40-ish屬性?

回答

1

你在找什麼叫做遞歸比較。不幸的是,在.NET框架中沒有內置的功能來實現這一點。

這是一個不平凡的任務,特別是如果你有嵌套的集合類型。以下問題列出了C#人員爲此問題找到的一些常見解決方案。他們可能是你的選擇爲好,如果你將它們轉換爲VB或使用它們作爲一個外部庫:

+0

http://converter.telerik.com/一個在線代碼轉換器...不完美,但如果你在鏈接的例子中飼料,它應該給你一個良好的開始... – user2366842

+0

謝謝!我使用C#深層/遞歸對象問題的答案,它完美地工作。儘管這個問題是針對C#的,但比較.NET對象實際上有一個我可以在VB.NET中使用的DLL文件。再次感謝。 – aardvarkm11

0

嘗試,而不是你這個代碼:

For Each ObjSub as CustomClass in Obj1 
    If Obj2.Contains(ObjSub) Then 

    End If 
Next 

您想查看Obj2是否包含元素Obj1,而不是Obj1本身。