|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Aan de constructor van een Hashtable kan je een IEqualityComparer object doorgeven die bepaald wat logische gelijkheid inhoudt voor het keytype en dat bepaald hoe de hash code van keyobjecten wordt bepaald.
Bij de typesafe Dictionary(Of TKey, TValue) kan je van een typesafe variatie van deze interface gebruik maken, namelijk IEqualityComparer(Of T).
De System.Collections.Generic.IEqualityComparer(Of T) heeft twee members : - Function Equals(ByVal x As T, ByVal y As T) As Boolean en - Function GetHashCode(ByVal obj As T) As Integer
Aan de constructor van de Dictionary(Of TKey, TValue) geef je een object door van een type dat IEqualityComparer(Of TKey) implementeert : Visual Basic 2010 Broncode Public Enum File FileA FileB End EnumPublic Enum Rank Rank1 Rank2 End EnumPublic Class Square Public Sub New( ByVal file As File, ByVal rank As Rank) _File = file _Rank = rank End Sub Private ReadOnly _File As File Public ReadOnly Property File() As File Get File = _File End Get End Property Private ReadOnly _Rank As Rank Public ReadOnly Property Rank() As Rank Get Rank = _Rank End Get End Property Public Overrides Function Equals( ByVal obj As Object) As Boolean If obj IsNot Nothing AndAlso TypeOf obj Is Square Then Dim other As Square = DirectCast(obj, Square) Equals = ( Me.Rank = other.Rank AndAlso Me.File = other.File) End If End Function Public Overrides Function GetHashCode() As Integer GetHashCode = File Xor Rank End FunctionEnd ClassClass SquareComparer : Implements IEqualityComparer( Of Square) Public Function Equals( ByVal x As Square, ByVal y As Square) As Boolean _ Implements IEqualityComparer( Of Square).Equals If x IsNot Nothing AndAlso y IsNot Nothing Then Equals = (x.Rank = y.Rank AndAlso x.File = y.File) End If End Function Public Function GetHashCode( ByVal obj As Square) As Integer _ Implements IEqualityComparer( Of Square).GetHashCode If obj IsNot Nothing Then GetHashCode = obj.File Xor obj.Rank End FunctionEnd ClassClass Client Public Shared Sub Main() Dim square1 As New Square(File.FileA, Rank.Rank1) Dim square2 As New Square(File.FileB, Rank.Rank1) Dim square3 As New Square(File.FileA, Rank.Rank1) Dim board As New Dictionary( Of Square, String)( New SquareComparer) board.Add(square1, "R") board.Add(square2, "K") Console.WriteLine(board.Item(square1).ToString()) Console.WriteLine(board.Item(square2).ToString()) Console.WriteLine(board.Item(square3).ToString()) Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output R
K
R
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|