Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

IEqualityComparer<T>-Schnittstelle

Definiert Methoden, die den Vergleich von Objekten auf Gleichheit unterstützen.

Namespace:  System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

public interface IEqualityComparer<in T>

Typparameter

in T

Der Typ der zu vergleichenden Objekte.

Dieser Typparameter ist Contravariant. Das heißt, Sie können entweder den angegebenen Typ oder einen weniger abgeleiteten Typ verwenden. Weitere Informationen zu Ko- und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generika.

Der IEqualityComparer<T>-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsEqualsBestimmt, ob die angegebenen Objekte gleich sind.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetHashCodeGibt einen Hashcode für das angegebene Objekt zurück.
Zum Seitenanfang

Diese Schnittstelle ermöglicht die Implementierung von benutzerdefinierten Gleichheitsvergleichen für Auflistungen. Sie können eine eigene Gleichheitsdefinition für den Typ T erstellen und angeben, dass diese Definition mit einem Auflistungstyp verwendet wird, der die generische IEqualityComparer<T>-Schnittstelle akzeptiert. In .NET Framework akzeptieren Konstruktoren vom Typ der generischen Dictionary<TKey, TValue>-Auflistung diese Schnittstelle.

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

Diese Schnittstelle unterstützt nur Gleichheitsvergleiche. Die generische IComparer<T>-Schnittstelle ermöglicht die Anpassung von Vergleichen für Sortier- und Ordnungszwecke.

Es empfiehlt sich, von der EqualityComparer<T>-Klasse abzuleiten, statt die IEqualityComparer<T>-Schnittstelle zu implementieren, da die EqualityComparer<T>-Klasse mit der IEquatable<T>.Equals-Methode statt der Object.Equals-Methode auf Gleichheit testet. Dies entspricht den Methoden Contains, IndexOf, LastIndexOf und Remove der Dictionary<TKey, TValue>-Klasse und anderen generischen Auflistungen.

Im folgenden Beispiel werden einer Wörterbuchauflistung benutzerdefinierte Box-Objekte hinzugefügt. Die Box-Objekte werden als gleich betrachtet, wenn ihre Abmessungen übereinstimmen.


using System;
using System.Collections.Generic;
class Example
{
    static void Main()
    {
        try
        {

            BoxEqualityComparer boxEqC = new BoxEqualityComparer();

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

            Box redBox = new Box(4, 3, 4);
            Box blueBox = new Box(4, 3, 4);

            boxes.Add(redBox, "red");
            boxes.Add(blueBox, "blue");

            Console.WriteLine(redBox.GetHashCode());
            Console.WriteLine(blueBox.GetHashCode());
        }
        catch (ArgumentException argEx)
        {

            Console.WriteLine(argEx.Message);
        }
    }
}

public class Box
{
    public Box(int h,  int l, int w)
    {
        this.Height = h;
        this.Length = l;
        this.Width = w;
    }
    public int Height { get; set; }
    public int Length { get; set; }
    public int Width { get; set; }
}


class BoxEqualityComparer : IEqualityComparer<Box>
{

    public bool Equals(Box b1, Box b2)
    {
        if (b1.Height == b2.Height & b1.Length == b2.Length
                            & b1.Width == b2.Width)
        {
            return true;
        }
        else
        {
            return false;
        }
    }


    public int GetHashCode(Box bx)
    {
        int hCode = bx.Height ^ bx.Length ^ bx.Width;
        return hCode.GetHashCode();
    }

}





.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft