Auf Englisch lesen

Freigeben über


IEqualityComparer<T> Schnittstelle

Definition

Definiert Methoden zur Unterstützung der Gleichheitsüberprüfung von Objekten.

C#
public interface IEqualityComparer<in T>
C#
public interface IEqualityComparer<T>

Typparameter

T

Der Typ der zu vergleichenden Objekte.

Dieser Typparameter ist kontravariant. Das bedeutet, dass Sie entweder den angegebenen Typ oder einen weniger abgeleiteten Typ verwenden können. Weitere Informationen zu Kovarianz und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generics.
Abgeleitet

Beispiele

Im folgenden Beispiel werden benutzerdefinierte Box Objekte zu einer Wörterbuchauflistung hinzugefügt. Die Box Objekte gelten als gleich, wenn ihre Dimensionen identisch sind.

C#
using System;
using System.Collections.Generic;

static class Example
{
    static void Main()
    {
        BoxEqualityComparer comparer = new();

        Dictionary<Box, string> boxes = new(comparer);

        AddBox(new Box(4, 3, 4), "red");
        AddBox(new Box(4, 3, 4), "blue");
        AddBox(new Box(3, 4, 3), "green");

        Console.WriteLine($"The dictionary contains {boxes.Count} Box objects.");

        void AddBox(Box box, string name)
        {
            try
            {
                boxes.Add(box, name);
            }
            catch (ArgumentException e)
            {
                Console.WriteLine($"Unable to add {box}: {e.Message}");
            }
        }
    }
}

class Box
{
    public int Height { get; }
    public int Length { get; }
    public int Width { get; }

    public Box(int height, int length, int width)
    {
        Height = height;
        Length = length;
        Width = width;
    }

    public override string ToString() => $"({Height}, {Length}, {Width})";
}

class BoxEqualityComparer : IEqualityComparer<Box>
{
    public bool Equals(Box? b1, Box? b2)
    {
        if (ReferenceEquals(b1, b2))
            return true;

        if (b2 is null || b1 is null)
            return false;

        return b1.Height == b2.Height
            && b1.Length == b2.Length
            && b1.Width == b2.Width;
    }

    public int GetHashCode(Box box) => box.Height ^ box.Length ^ box.Width;
}

// The example displays the following output:
//    Unable to add (4, 3, 4): An item with the same key has already been added.
//    The dictionary contains 2 Box objects.

Hinweise

Diese Schnittstelle ermöglicht die Implementierung eines benutzerdefinierten Gleichheitsvergleichs für Sammlungen. Das heißt, Sie können Eine eigene Definition der Gleichheit für den Typ Terstellen und angeben, dass diese Definition mit einem Auflistungstyp verwendet wird, der die IEqualityComparer<T> generische Schnittstelle akzeptiert. Im .NET Framework akzeptieren Konstruktoren des Dictionary<TKey,TValue> generischen Auflistungstyps diese Schnittstelle.

Eine Standardimplementierung dieser Schnittstelle wird von der Default Eigenschaft der EqualityComparer<T> generischen Klasse bereitgestellt. Die StringComparer -Klasse implementiert IEqualityComparer<T> den Typ String.

Diese Schnittstelle unterstützt nur Gleichheitsvergleiche. Die Anpassung von Vergleichen zum Sortieren und Sortieren wird über die IComparer<T> generische Schnittstelle bereitgestellt.

Es wird empfohlen, dass Sie von der EqualityComparer<T> -Klasse ableiten, anstatt die IEqualityComparer<T> Schnittstelle zu implementieren, da die EqualityComparer<T> Klasse die Gleichheit mithilfe der IEquatable<T>.Equals -Methode anstelle der Object.Equals -Methode testet. Dies ist konsistent mit den ContainsMethoden , IndexOf, LastIndexOfund Remove der Dictionary<TKey,TValue> -Klasse und anderen generischen Auflistungen.

Methoden

Equals(T, T)

Bestimmt, ob die angegebenen Objekte gleich sind.

GetHashCode(T)

Gibt einen Hashcode für das angegebene Objekt zurück.

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Weitere Informationen