我为代表数据库对象的类创建了一个 IEqualityComparer,我想重写这些类的 Equals 方法,以便在调用 Equals、Contains 等时比较对象的 Id。问题是我的 Equals 函数是从来没有打电话,谁能明白为什么测试总是返回假?
谢谢!
DatabaseEntityEqualityComparer.vb
Imports System.Collections.Generic
Public Class DatabaseEntityEqualityComparer
Implements IEqualityComparer(Of IDatabaseEntity)
Public Overloads Function Equals(x As IDatabaseEntity, y As IDatabaseEntity) As Boolean Implements IEqualityComparer(Of IDatabaseEntity).Equals
'check whether the compared objects reference the same data
If x Is y Then Return True
'check whether any of the compared objects is null
If x Is Nothing OrElse y Is Nothing Then Return False
'check whether the IDatabaseEntity properties are equal, and are of the same type
Return (x.Id = y.Id) AndAlso (x.GetType() = y.GetType())
End Function
Public Overloads Function GetHashCode(obj As IDatabaseEntity) As Integer Implements IEqualityComparer(Of IDatabaseEntity).GetHashCode
If obj Is Nothing Then
Return 0
End If
Return obj.Id.ToString().GetHashCode()
End Function
End Class
IDatabaseEntity.vb
Public Interface IDatabaseEntity
Property Id As Integer
End Interface
人物.vb
Public Class Person
Implements IDatabaseEntity
Public Property Id As Integer Implements IDatabaseEntity.Id
End Class
运行测试
Dim p1 As New Person()
p1.Id = 1
Dim p2 As New Person()
p2.Id = 1
If p1.Equals(p2) Then
Response.Write("Equals")
Else
Response.Write("Not Equals")
End If
Response.End()