比较两个复杂对象
Comparing two complex objects
我搜索了 Whosebug,在 Visual Studio(特别是 VB.NET)中找到了很多比较两个复杂对象的答案,但没有找到适合我的答案。
我的对象包含 40 多个不同数据类型的属性(整数、双精度、双精度列表、字符串列表列表等),其他属性可能会在程序更新时随时添加,因此使用反射来手动输入每个 属性 名称对我没有用。
具体来说,这就是两个对象的组织方式
Obj1 = New List(of CustomClass)
Obj2 = New List(of CustomClass)
"CustomClass" 有 40 多个属性,例如:
Dim _Color1 as Color
Dim Prop1 as New List(of String)
Dim _Event1 as New List(of List(of String))
...
我试过使用:
对象 1 是对象 2
Object.Compare(对象 1,对象 2)
Obj1.equals(目标 2)
即使 Obj1 和 Obj2 包含相同的值,它们仍然评估为 false。
我也试过:
For Each ObjSub as CustomClass in Obj1
If Obj2.Contains(Obj1) = True Then
End If
Next
但是,即使 Obj1 和 Obj2 包含相同的值,.Contains 的计算结果也为 False。
有没有什么方法可以只比较 Obj1 和 Obj2 中的值,而不必输入所有 40 个属性?
您要查找的内容称为深度 或递归比较。不幸的是,.NET Framework 中没有任何内置功能可以做到这一点。
这是一项非常重要的任务,尤其是当您有嵌套的集合类型时。以下问题列出了 C# 人员针对此问题找到的一些常见解决方案。如果您将它们转换为 VB 或将它们用作外部库,它们也可能是您的选择:
- C# implementation of deep/recursive object comparison in .net 3.5
试试这个而不是你的代码:
For Each ObjSub as CustomClass in Obj1
If Obj2.Contains(ObjSub) Then
End If
Next
您想查看 Obj2
是否包含 Obj1
的 元素 ,而不是 Obj1
本身。
我搜索了 Whosebug,在 Visual Studio(特别是 VB.NET)中找到了很多比较两个复杂对象的答案,但没有找到适合我的答案。
我的对象包含 40 多个不同数据类型的属性(整数、双精度、双精度列表、字符串列表列表等),其他属性可能会在程序更新时随时添加,因此使用反射来手动输入每个 属性 名称对我没有用。
具体来说,这就是两个对象的组织方式
Obj1 = New List(of CustomClass)
Obj2 = New List(of CustomClass)
"CustomClass" 有 40 多个属性,例如:
Dim _Color1 as Color
Dim Prop1 as New List(of String)
Dim _Event1 as New List(of List(of String))
...
我试过使用: 对象 1 是对象 2 Object.Compare(对象 1,对象 2) Obj1.equals(目标 2)
即使 Obj1 和 Obj2 包含相同的值,它们仍然评估为 false。
我也试过:
For Each ObjSub as CustomClass in Obj1
If Obj2.Contains(Obj1) = True Then
End If
Next
但是,即使 Obj1 和 Obj2 包含相同的值,.Contains 的计算结果也为 False。
有没有什么方法可以只比较 Obj1 和 Obj2 中的值,而不必输入所有 40 个属性?
您要查找的内容称为深度 或递归比较。不幸的是,.NET Framework 中没有任何内置功能可以做到这一点。
这是一项非常重要的任务,尤其是当您有嵌套的集合类型时。以下问题列出了 C# 人员针对此问题找到的一些常见解决方案。如果您将它们转换为 VB 或将它们用作外部库,它们也可能是您的选择:
- C# implementation of deep/recursive object comparison in .net 3.5
试试这个而不是你的代码:
For Each ObjSub as CustomClass in Obj1
If Obj2.Contains(ObjSub) Then
End If
Next
您想查看 Obj2
是否包含 Obj1
的 元素 ,而不是 Obj1
本身。