比较2个对象,看它们是否在VB.NET中兼容

时间:2010-02-10 16:30:51

标签: vb.net

我想测试是否可以比较2个对象的值。

例如,如果我将变量define定义为包含值“A”的对象,将另一个变量定义为值为0的对象。(这些必须定义为Object类型。)

当我做一个简单的比较If Object1 <> Object2 Then等时,我收到一个错误。 那么我该如何测试以查看对象是否具有可比性?我看过TryCast,DirectCast,Ctype等,但看不出这些可以帮助。

任何建议。

6 个答案:

答案 0 :(得分:2)

在定义类时,应使用ICompare和IComparable接口。 How to use ICompare and IComparable (MSDN)

答案 1 :(得分:1)

您希望在班级中实施IComparer interface

Compare方法是神奇发生的地方。

答案 2 :(得分:1)

如果您只是想检查并查看它们是否属于同一类型,那么我认为您可以这样做:

If Object1.GetType is Object2.GetTypeThen
    ...
End If

答案 3 :(得分:0)

另一种方法是重载GetHashCode方法,返回对象的复合键,然后将Object1.GetHashcode与Object2.GetHashCode进行比较。 但实际上我会(如其他答案中所述)实现IComparable(Of T)。

编辑 - 添加了示例代码

Public Class MyClassA

    Private _myVariable As String = String.Empty
    Public Property MyProperty() As String
        Get
            Return "Fooey"
        End Get
        Set(ByVal value As String)
            _myVariable = value
        End Set
    End Property

    Public Overloads Overrides Function GetHashCode() As Integer
        Return MyProperty.GetHashCode
    End Function

    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        Return (Me.GetHashCode = obj.GetHashCode)
    End Function

End Class

Public Class MyClassB

    Private _myVariable As String = String.Empty
    Public Property MyProperty() As String
        Get
            Return "Fooey"
        End Get
        Set(ByVal value As String)
            _myVariable = value
        End Set
    End Property

    Public Overloads Overrides Function GetHashCode() As Integer
        Return MyProperty.GetHashCode
    End Function

    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        Return (Me.GetHashCode = obj.GetHashCode)
    End Function

End Class

因为你有Overriden(并且已经重载以返回你想要的类型)的Equals运算符,并且在其中使用了覆盖的GetHashCode方法,你可以做到

If MyClassA.Equals(MyClassB) ......

然后你要做的就是决定把GetHashCode方法放在哪里,这个方法可以让你把一个对象与另一个对象(复合键)进行比较。

希望这有帮助。

答案 4 :(得分:0)

您可以使用Type.IsAssignableFrom方法测试类型兼容性。当然,这是关于可转让性而不是可比性,但我想这是你得到的最接近的。

FWIW,我宁愿尝试解决两种类型Object的要求。难道你不能使用其他一些提供可比性机制的共同基类型吗?只是在问题上抛出简单的Object听起来就像是一个设计问题并且具有明显的代码味道。

答案 5 :(得分:0)

是gethashcode,仅等于比较引用但比较值。尝试IEqualityComparer。 希望这个帮助