2010-03-14 9 views
1

J'ai plusieurs entités dont j'ai besoin pour rendre IEquatable (Of TEntity) respectivement.Cascading IEquatable (Of T)

Je veux les premiers à vérifier l'égalité entre les entityID, alors si les deux sont égaux à zéro, doit vérifier en ce qui concerne d'autres propriétés, par exemple même nom de contact, même numéro de téléphone, etc.

Comment est-ce fait?

Répondre

3

Adapté de MSDN IEquatable:

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 

Note:

Les implémentations de GetHashCode est naïve et si vous avez besoin de l'utiliser dans un environnement de production, lisez les réponses à this SO question.

+0

Merci Oded. Comment éviter NullReferenceException sur ContactName? תודה רבה – Shimmy

+0

Vérifiez que 'Moi' est' Nothing' avant d'essayer d'accéder à quelque chose dessus. – Oded

+0

Je ne peux pas être rien, je n'ai pas à le vérifier, la question est qu'en est-il si le champ Id est égal à Nothing, comment devrais-je obtenir son hashcode? – Shimmy

Questions connexes