Vb.net 级联可数(Of T)
我有几个实体,我需要分别使其具有足够的(可能性) 我希望他们首先检查EntityId之间的相等性,然后如果两者都为零,则应检查其他属性,例如相同的联系人姓名、相同的电话号码等 这是如何做到的?改编自:Vb.net 级联可数(Of T),vb.net,generics,iequatable,Vb.net,Generics,Iequatable,我有几个实体,我需要分别使其具有足够的(可能性) 我希望他们首先检查EntityId之间的相等性,然后如果两者都为零,则应检查其他属性,例如相同的联系人姓名、相同的电话号码等 这是如何做到的?改编自: 公共类实体:实现IEquatable(Of实体) 公共重载函数等于布尔值(其他为实体)_ 实现(实体的)IEquatable。等于 如果Me.Id=other.Id,则 返回Me.ContactName=other.ContactName,并返回Me.PhoneNumber=other.Phone
公共类实体:实现IEquatable(Of实体)
公共重载函数等于布尔值(其他为实体)_
实现(实体的)IEquatable。等于
如果Me.Id=other.Id,则
返回Me.ContactName=other.ContactName,并返回Me.PhoneNumber=other.PhoneNumber
其他的
返回错误
如果结束
端函数
公共重写函数等于布尔值(对象为obj)
如果obj为Nothing,则返回MyBase.Equals(obj)
如果obj的类型为实体
返回等于(DirectCast(对象、实体))
其他的
返回错误
如果结束
端函数
公共重写函数GetHashCode()为整数
返回Me.Id.GetHashCode()Xor Me.ContactName.GetHashCode()Xor Me.PhoneNumber.GetHashCode()
端函数
公共共享运算符=(entity1作为实体,entity2作为实体)作为布尔值
返回entity1.Equals(entity2)
终端操作员
作为布尔值的公共共享运算符(entity1作为实体,entity2作为实体)
返回非entity1.Equals(entity2)
终端操作员
末级
注意:
GetHashCode
的实现非常简单,如果您需要在生产环境中使用它,请阅读SO问题的答案。谢谢Oded。如何避免ContactName上出现NullReferenceException?在尝试访问任何内容之前,请先检查Me
beingNothing
。Me不可能什么都不是,我不必检查它,问题是如果Id字段等于Nothing,我应该如何获取它的hashcode?
Public Class Entity : Implements IEquatable(Of Entity)
Public Overloads Function Equals(other As Entity) As Boolean _
Implements IEquatable(Of Entity).Equals
If Me.Id = other.Id Then
Return Me.ContactName = other.ContactName AndAlso Me.PhoneNumber = other.PhoneNumber
Else
Return False
End If
End Function
Public Overrides Function Equals(obj As Object) As Boolean
If obj Is Nothing Then Return MyBase.Equals(obj)
If TypeOf obj Is Entity
Return Equals(DirectCast(obj, Entity))
Else
Return False
End If
End Function
Public Overrides Function GetHashCode() As Integer
Return Me.Id.GetHashCode() Xor Me.ContactName.GetHashCode() Xor Me.PhoneNumber.GetHashCode()
End Function
Public Shared Operator = (entity1 As Entity, entity2 As Entity) As Boolean
Return entity1.Equals(entity2)
End Operator
Public Shared Operator <> (entity1 As Entity, entity2 As Entity) As Boolean
Return Not entity1.Equals(entity2)
End Operator
End Class