【问题标题】:VB: how to compare two objects to find out if the values of their properties are the same?VB:如何比较两个对象来确定它们的属性值是否相同?
【发布时间】:2019-11-22 12:15:17
【问题描述】:

我有一个名为Statistics 的对象。在这个对象内部还有 6 个对象。每个都包含带有值的属性。

例如,Statistics(0) 包含“年龄”字段、“性别”字段、“车辆”等... Statistics(1)Statistics(2) 等也是如此......

我想要做的是将Statistics(0) 一直与Statistics(6) 进行比较,并找出其中任何一个是否与另一个相同。

如果Statistics(0) 中包含的所有字段都与Statistics(1) 中的字段具有相同的值,我想做点什么。

如何将这些对象相互比较?

我尝试过的

For Each Stat As ExportStatistics In Statistics
    Insert_VehicleStats(Stat) 'Insert values into main Vehicle table 

    If Statistics.Length > 1 Then
    Dim i = 0
    Dim y = 0
    Dim previousObject As ExportStatistics

    For Each Stat2 In Statistics

        If Stat2.Equals(previousObject) Then
            Dim sadXml = "do something"
        End If

       previousObject = Stat2

    Next
End if

【问题讨论】:

  • 您是否要求精确对齐,即left.VehicleStatistics(0) 将与right.VehicleStatistics(0) 完全匹配(而不是right.VehicleStatistics(2))?

标签: vb.net for-loop foreach compare equals


【解决方案1】:

您可以覆盖类中的 Equals 函数或重载它,然后创建自己的比较代码。这是一个示例(假设您的对象是 VehicleStatisticsItem 类型):

 Public Class VehicleStatisticsItem

  Public Overrides Function Equals(obj As Object) As Boolean
    'Test for type and define tests or just pass to base function
    Return MyBase.Equals(obj)
  End Function

  Public Overloads Function Equals(item As VehicleStatisticsItem) As Boolean
    'Define your tests here
  End Function

End Class

【讨论】:

  • 如果你这样做,你可能还想实现IEquatable(Of T)
【解决方案2】:

即使它们的属性相等,您正在比较的 2 个对象也不会彼此相等。您需要指定您正在比较它们的属性。

改变

If vehicleStatistic.Equals(previousObject) Then
        Dim sadXml = "do something"
End If

If vehicleStatistic.GetType().GetProperties.Equals(previousObject.GetType().GetProperties) Then
        Dim sadXml = "do something"
End If

这样你就可以比较它们的属性了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2016-09-15
    相关资源
    最近更新 更多