IEqualityComparer(T) Schnittstelle
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
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

 

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.

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 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()
   {
      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.

Universal Windows Platform
Verfügbar seit 4.5
.NET Framework
Verfügbar seit 2.0
Portable Class Library
Unterstützt in: portable .NET platforms
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:
© 2016 Microsoft