Archief - [PROG]VB.net equals & hashcode

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

jonaskellens

Legacy Member
Public Class Coordinate
Private m_rijnr As Integer
Public Property rijnr() As Integer
Get
rijnr = m_rijnr
End Get
Set(ByVal value As Integer)
m_rijnr = value
End Set
End Property
Private m_kolomnr As Integer
Public Property kolomnr() As Integer
Get
kolomnr = m_kolomnr
End Get
Set(ByVal value As Integer)
m_kolomnr = value
End Set
End Property
Public Overrides Function Equals(ByVal obj As Object) As Boolean
If TypeOf obj Is Coordinate Then
Dim other As Coordinate = DirectCast(obj, Coordinate)
Equals = Me.rijnr = other.rijnr AndAlso Me.kolomnr = other.kolomnr
End If
End Function
End Class


Class Vloot
Public Sub bomb(ByVal tebombarderencoordinaat As Coordinate, ByVal vlootcpu As ZeeslagClassLibrary.vloot)
If Me.GetReedsBeschotenCoordinaten.ContainsKey(tebombarderencoordinaat) Then 'check coordinaat reeds op afgevuurd
Me.m_GeefResultaatVanBomb = ResultaatVanBomb.reeds_afgevuurd 'coordinaat reeds afgevuurd
Else
...
end Class

Wanneer ik via mijn client (console-app) 2 maal dezelfde coördinaat doorgeef, dan zou ik de melding moeten krijgen dat de coördinaat reeds gebombardeerd is. Echter de method Me.GetReedsBeschotenCoordinaten.ContainsKey(tebombarderencoordinaat) evalueert naar False. Terwijl deze true zou moeten zijn want 2 dezelfde coördinaten worden vergeleken.

Via tweakers heb ik vernomen dat ik ook de method GetHashCode moet overschrijven, maar in mijn lessen VB.net heb ik niks gezien over HashCodes. Wel over de method Equals... dewelke ik dan ook overschrijf...
Op tweakers is mijn topic dan afgesloten geweest omdat ze geen zin meer hadden mij verder te helpen.

Ik hoop dat hier iemand mij kan helpen met wat ik moet doen ???

Tyfius

Legacy Member
Meestal gaat HashCode een XOR terug geven.

Stel:
Code:
Private x As Integer
Private y As Integer
Public Overloads Overrides Function GetHashCode() As Integer

    Return x Xor y
End Function
In jouw geval moet die dus enkel m_rijnr returnen.

Loop er zeker met de debugger ook eens door om zeker te zijn dat die wel in die Equals methode komt en die check uitvoert.

jonaskellens

Legacy Member
Public Overrides Function GetHashCode() As Integer
'Xor has the advantage of not overflowing the integer.
Return X.GetHashCode Xor Y.GetHashCode

End Function

Heb ik gevonden via google... Dank voor je hulp !
De vergelijking tussen coordinates lukt nu perfect !
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan