IEquatable<T> Interface

Definitie

Definieert een gegeneraliseerde methode die door een waardetype of klasse wordt geïmplementeerd om een typespecifieke methode te maken voor het bepalen van gelijkheid van instanties.

generic <typename T>
public interface class IEquatable
public interface IEquatable<T>
public interface IEquatable<T> where T : allows ref struct
type IEquatable<'T> = interface
Public Interface IEquatable(Of T)

Type parameters

T

Het type objecten dat moet worden vergeleken.

Afgeleid

Voorbeelden

In het volgende voorbeeld ziet u de gedeeltelijke implementatie van een Person klasse die twee eigenschappen implementeert IEquatable<T> en heeft, LastName en NationalId. NationalIdwordt beschouwd als een unieke id, daarom retourneert de Equals methode als de True eigenschap van twee NationalId objecten identiek is; anders wordt deze geretourneerdPersonFalse. (In het F#-voorbeeld worden geen waarden voor null exemplaren verwerktPerson.)

public class Person : IEquatable<Person>
{
    public Person(string lastName, string ssn)
    {
        LastName = lastName;
        NationalId = ssn;
    }

    public string LastName { get; }

    public string NationalId { get; }

    public bool Equals(Person? other) => other is not null && other.NationalId == NationalId;

    public override bool Equals(object? obj) => Equals(obj as Person);

    public override int GetHashCode() => NationalId.GetHashCode();

    public static bool operator ==(Person person1, Person person2)
    {
        if (person1 is null)
        {
            return person2 is null;
        }

        return person1.Equals(person2);
    }

    public static bool operator !=(Person person1, Person person2)
    {
        if (person1 is null)
        {
            return person2 is not null;
        }

        return !person1.Equals(person2);
    }
}
open System

type Person(lastName: string, nationalId: string) =
    member this.LastName = lastName
    member this.NationalId = nationalId

    interface IEquatable<Person> with
        member this.Equals(other: Person) =
            other.NationalId = this.NationalId

    override this.Equals(obj: obj) =
        match obj with
        | :? Person as person -> (this :> IEquatable<Person>).Equals(person)
        | _ -> false

    override this.GetHashCode() =
        this.NationalId.GetHashCode()

    static member (==) (person1: Person, person2: Person) =
        person1.Equals(person2)

    static member (!=) (person1: Person, person2: Person) =
        not (person1.Equals(person2))
Public Class Person
    Implements IEquatable(Of Person)

    Public Sub New(lastName As String, nationalId As String)
        Me.LastName = lastName
        Me.NationalId = nationalId
    End Sub

    Public ReadOnly Property LastName As String
    Public ReadOnly Property NationalId As String

    Public Overloads Function Equals(other As Person) As Boolean Implements IEquatable(Of Person).Equals
        Return other IsNot Nothing AndAlso other.NationalId = Me.NationalId
    End Function

    Public Overrides Function Equals(obj As Object) As Boolean
        Return Equals(TryCast(obj, Person))
    End Function

    Public Overrides Function GetHashCode() As Integer
        Return NationalId.GetHashCode()
    End Function

    Public Shared Operator =(person1 As Person, person2 As Person) As Boolean
        If person1 Is Nothing Then
            Return person2 Is Nothing
        End If
        Return person1.Equals(person2)
    End Operator

    Public Shared Operator <>(person1 As Person, person2 As Person) As Boolean
        If person1 Is Nothing Then
            Return person2 IsNot Nothing
        End If
        Return Not person1.Equals(person2)
    End Operator
End Class

Opmerkingen

Deze interface wordt geïmplementeerd door typen waarvan de waarden kunnen worden vergeleken (bijvoorbeeld de numerieke en tekenreeksklassen). Een waardetype of -klasse implementeert de Equals methode om een typespecifieke methode te maken die geschikt is voor het bepalen van gelijkheid van instanties.

Note

De IComparable<T> interface definieert de CompareTo methode, die de sorteervolgorde bepaalt van exemplaren van het implementatietype. De IEquatable<T> interface definieert de Equals methode, die de gelijkheid van instanties van het implementatietype bepaalt.

De IEquatable<T> interface wordt gebruikt door algemene verzamelingsobjecten zoals Dictionary<TKey,TValue>, List<T>en LinkedList<T> bij het testen op gelijkheid in methoden zoals Contains, IndexOf, LastIndexOfen Remove. Deze moet worden geïmplementeerd voor elk object dat kan worden opgeslagen in een algemene verzameling.

Zie opmerkingen over de methode voor meer informatie over het implementeren van de IEquatable<T>IEquatable<T>.Equals interface.

Notities voor uitvoerders

Vervang de typeparameter van de IEquatable<T> interface door het type dat deze interface implementeert.

Als u implementeert IEquatable<T>, moet u ook de basisklasse-implementaties Equals(Object)GetHashCode() van en zodanig overschrijven dat hun gedrag consistent is met die van de Equals(T) methode. Als u de Equals(Object)onderdrukking uitvoert, wordt uw overschreven implementatie ook aangeroepen in aanroepen naar de statische Equals(System.Object, System.Object) methode in uw klas. Bovendien moet u de op_Equality en op_Inequality operators overbelasten. Dit zorgt ervoor dat alle tests voor gelijkheid consistente resultaten retourneren.

Zie voor meer informatie over het overschrijven Equals(Object)Equals(Object).

Voor een waardetype moet u altijd implementeren IEquatable<T> en overschrijven Equals(Object) voor betere prestaties. Equals(Object) waardetypen van vakken en is afhankelijk van weerspiegeling om twee waarden voor gelijkheid te vergelijken. Zowel uw implementatie van Equals(T) als uw onderdrukking Equals(Object) moeten consistente resultaten opleveren.

Als u implementeert IEquatable<T>, moet u ook implementeren IComparable<T> als exemplaren van uw type kunnen worden gesorteerd of gesorteerd. Als uw type wordt geïmplementeerd IComparable<T>, implementeert IEquatable<T>u bijna altijd ook .

Houd er rekening mee dat er enkele ontwerpen zijn waarbij een type een orderrelatie ondersteunt, maar gelijkheid kan verschillen van een orderrelatie. Overweeg een Person klas waar u alfabetisch sorteert. Twee personen met dezelfde naam sorteren hetzelfde, maar zijn niet dezelfde persoon.

Methoden

Name Description
Equals(T)

Hiermee wordt aangegeven of het huidige object gelijk is aan een ander object van hetzelfde type.

Van toepassing op

Zie ook