【发布时间】:2010-08-30 16:03:13
【问题描述】:
我想用一个 Dictionary(Of Key, Value),而 Key 不是基类型,而是一个类,比如:
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
现在要让 Dictionary 工作并找到键,我必须在 Key 类中实现 System.IEquatable 接口(或使用不同的构造函数,但这是另一回事):
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 实现是否正确?我应该如何实现它,以返回一种将字符串和布尔哈希码合并的哈希码?
【问题讨论】:
-
感谢 swdevman81,我想我会在帮助类中使用其中的一些代码。
标签: c# vb.net collections dictionary