Я хочу использовать словарь (Of Key, Value), и ключ - это не базовый тип, а класс вроде:
Public Class MyKey
Sub New(ByVal packet As String, ByVal sent As Boolean)
Me.packet = packet.ToUpper.Trim
Me.sent = sent
End Sub
Private packet As String
Private sent As Boolean
End Class
Теперь, чтобы словарь работал и находил ключи,Я должен реализовать интерфейс System.IEquatable в классе Key (или использовать другой конструктор, но это уже другая история):
Public Class MyKey
Implements System.IEquatable(Of MyKey)
Sub New(ByVal packet As String, ByVal sent As Boolean)
Me.packet = packet.ToUpper.Trim
Me.sent = sent
End Sub
Public Overloads Function Equals(ByVal other As MyKey) As Boolean Implements IEquatable(Of MyKey).Equals
Return other.sent = Me.sent AndAlso other.packet = Me.packet
End Function
Private packet As String
Private sent As Boolean
End Class
Но для получения согласованных результатов мне также необходимо реализовать Object.Equals и Object.GetHashCode:
Public Class MyKey
Implements System.IEquatable(Of MyKey)
Sub New(ByVal packet As String, ByVal sent As Boolean)
Me.packet = packet.ToUpper.Trim
Me.sent = sent
End Sub
Public Overloads Function Equals(ByVal other As ChiavePietanza) As Boolean Implements IEquatable(Of MyKey).Equals
Return other.sent = Me.sent AndAlso other.packet = Me.packet
End Function
Overrides Function Equals(ByVal o As Object) As Boolean
Dim cast As MyKey = DirectCast(o, MyKey)
Return Equals(cast)
End Function
Public Overrides Function GetHashCode() As Integer
Return packet.GetHashCode Or sent.GetHashCode
End Function
Private packet As String
Private sent As Boolean
End Class
Вопрос в том, верна ли реализация GetHashCode?Как мне реализовать это, чтобы вернуть хеш-код, который объединяет строку и логические хеш-коды?