我想测试是否可以比较2个对象的值。
例如,如果我将变量define定义为包含值“A”的对象,将另一个变量定义为值为0的对象。(这些必须定义为Object类型。)
当我做一个简单的比较If Object1 <> Object2 Then
等时,我收到一个错误。
那么我该如何测试以查看对象是否具有可比性?我看过TryCast,DirectCast,Ctype等,但看不出这些可以帮助。
任何建议。
答案 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。 希望这个帮助