Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

23.13. IEqualityComparer Of T

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 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 2012 Broncode - Codevoorbeeld 609
Public Enum File
    FileA
    FileB
    ' ...
End Enum
Public Enum Rank
    Rank1
    Rank2
    ' ...
End Enum
Public 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 Function
End Class
Class 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 Function
End Class
Class 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()) ' R
        Console.WriteLine(board.Item(square2).ToString()) ' K
        Console.WriteLine(board.Item(square3).ToString()) ' R
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
R
K
R

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.