Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

IEqualityComparer<T>-Schnittstelle

 

Veröffentlicht: Oktober 2016

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

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

public interface IEqualityComparer<in T>

Typparameter

inT

Der Typ der zu vergleichenden Objekte.

NameBeschreibung
System_CAPS_pubmethodEquals(T, T)

Bestimmt, ob die angegebenen Objekte gleich sind.

System_CAPS_pubmethodGetHashCode(T)

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

Diese Schnittstelle ermöglicht die Implementierung von benutzerdefinierten Gleichheitsvergleich für Sammlungen. Sie können also Ihre eigene Definition von Gleichheit für den Typ erstellen T, und angeben, dass diese Definition mit einem Auflistungstyp verwendet wird, akzeptiert die IEqualityComparer<T> generische Schnittstelle. In .NET Framework, Konstruktoren der Dictionary<TKey, TValue> generischer Auflistungstyp dieser Schnittstelle.

Eine Standardimplementierung dieser Schnittstelle erfolgt über die Default Eigenschaft der EqualityComparer<T> generische Klasse. Die StringComparer -Klasse implementiert IEqualityComparer<T> vom Typ String.

Diese Schnittstelle unterstützt nur Gleichheitsvergleiche. Die Anpassung von Vergleichen für Sortierung und Reihenfolge der IComparer<T> generische Schnittstelle.

Es wird empfohlen, dass beim Ableiten von der EqualityComparer<T> Klasse anstatt zu implementieren die IEqualityComparer<T> Schnittstelle, da die EqualityComparer<T> -Klasse testet auf Gleichheit mit der IEquatable<T>.Equals -Methode anstelle der Object.Equals Methode. Dies entspricht der Contains, IndexOf, LastIndexOf, und Remove Methoden der Dictionary<TKey, TValue> -Klasse und andere generischen Auflistungen.

Im folgenden Beispiel wird die benutzerdefinierte Box Objekte ein Dictionary-Auflistung. Die Box Objekte gelten als gleich, wenn ihre Dimensionen gleich sind.

using System;
using System.Collections.Generic;

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

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

      var redBox = new Box(4, 3, 4);
      AddBox(boxes, redBox, "red");

      var blueBox = new Box(4, 3, 4);
      AddBox(boxes, blueBox, "blue");

      var greenBox = new Box(3, 4, 3);
      AddBox(boxes, greenBox, "green");
      Console.WriteLine();

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

   private static void AddBox(Dictionary<Box, String> dict, Box box, String name)
   {
      try {
         dict.Add(box, name);
      }
      catch (ArgumentException e) {
         Console.WriteLine("Unable to add {0}: {1}", box, e.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; }

    public override String ToString()
    {
       return String.Format("({0}, {1}, {2})", Height, Length, Width);
    }
}


class BoxEqualityComparer : IEqualityComparer<Box>
{
    public bool Equals(Box b1, Box b2)
    {
        if (b2 == null && b1 == null)
           return true;
        else if (b1 == null | b2 == null)
           return false;
        else 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();
    }
}
// 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.

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 2.0
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: