EqualityComparer<T> Klasa

Definicja

Udostępnia klasę bazową do implementacji interfejsu IEqualityComparer<T> ogólnego.

C#
public abstract class EqualityComparer<T> : System.Collections.Generic.IEqualityComparer<T>, System.Collections.IEqualityComparer
C#
[System.Serializable]
public abstract class EqualityComparer<T> : System.Collections.Generic.IEqualityComparer<T>, System.Collections.IEqualityComparer

Parametry typu

T

Typ obiektów do porównania.

Dziedziczenie
EqualityComparer<T>
Atrybuty
Implementuje

Przykłady

W poniższym przykładzie tworzona jest kolekcja słowników obiektów typu Box z porównywaniem równości. Dwa pola są traktowane jako równe, jeśli ich wymiary są takie same. Następnie dodaje pola do kolekcji.

Słownik jest odtwarzany przy użyciu porównania równości, który definiuje równość w inny sposób: dwa pola są traktowane jako równe, jeśli ich woluminy są takie same.

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

class Program
{
    static Dictionary<Box, String> boxes;

    static void Main()
    {
        BoxSameDimensions boxDim = new BoxSameDimensions();
        boxes = new Dictionary<Box, string>(boxDim);

        Console.WriteLine("Boxes equality by dimensions:");
        Box redBox = new Box(8, 4, 8);
        Box greenBox = new Box(8, 6, 8);
        Box blueBox = new Box(8, 4, 8);
        Box yellowBox = new Box(8, 8, 8);
        AddBox(redBox, "red");
        AddBox(greenBox, "green");
        AddBox(blueBox, "blue");
        AddBox(yellowBox, "yellow");

        Console.WriteLine();
        Console.WriteLine("Boxes equality by volume:");

        BoxSameVolume boxVolume = new BoxSameVolume();
        boxes = new Dictionary<Box, string>(boxVolume);
        Box pinkBox = new Box(8, 4, 8);
        Box orangeBox = new Box(8, 6, 8);
        Box purpleBox = new Box(4, 8, 8);
        Box brownBox = new Box(8, 8, 4);
        AddBox(pinkBox, "pink");
        AddBox(orangeBox, "orange");
        AddBox(purpleBox, "purple");
        AddBox(brownBox, "brown");
    }

    public static void AddBox(Box bx, string name)
    {
        try
        {
            boxes.Add(bx, name);
            Console.WriteLine("Added {0}, Count = {1}, HashCode = {2}",
                name, boxes.Count.ToString(), bx.GetHashCode());
        }
        catch (ArgumentException)
        {
            Console.WriteLine("A box equal to {0} is already in the collection.", name);
        }
    }
}

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 BoxSameDimensions : EqualityComparer<Box>
{
    public override bool Equals(Box b1, Box b2)
    {
        if (b1 == null && b2 == null)
            return true;
        else if (b1 == null || b2 == null)
            return false;

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

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

class BoxSameVolume : EqualityComparer<Box>
{
    public override bool Equals(Box b1, Box b2)
    {
        if (b1 == null && b2 == null)
            return true;
        else if (b1 == null || b2 == null)
            return false;

        return (b1.Height * b1.Width * b1.Length ==
                b2.Height * b2.Width * b2.Length);
    }

    public override int GetHashCode(Box bx)
    {
        int hCode = bx.Height * bx.Length * bx.Width;
        return hCode.GetHashCode();
    }
}
/* This example produces an output similar to the following:
 *
      Boxes equality by dimensions:
      Added red, Count = 1, HashCode = 46104728
      Added green, Count = 2, HashCode = 12289376
      A box equal to blue is already in the collection.
      Added yellow, Count = 3, HashCode = 43495525

      Boxes equality by volume:
      Added pink, Count = 1, HashCode = 55915408
      Added orange, Count = 2, HashCode = 33476626
      A box equal to purple is already in the collection.
      A box equal to brown is already in the collection.
 *
*/

Uwagi

Wygeneruj z tej klasy, aby zapewnić niestandardową implementację interfejsu IEqualityComparer<T> ogólnego do użycia z klasami kolekcji, takimi jak Dictionary<TKey,TValue> klasa ogólna, lub metodami takimi jak List<T>.Sort.

Właściwość Default sprawdza, czy typ T implementuje System.IEquatable<T> interfejs ogólny, a jeśli tak, zwraca wartość EqualityComparer<T> , która wywołuje implementację IEquatable<T>.Equals metody . W przeciwnym razie zwraca wartość , zgodnie z wartością podaną EqualityComparer<T>przez Telement .

W programie .NET 8 i nowszych wersjach zalecamy użycie EqualityComparer<T>.Create(Func<T,T,Boolean>, Func<T,Int32>) metody do tworzenia wystąpień tego typu.

Konstruktory

EqualityComparer<T>()

Inicjuje nowe wystąpienie klasy EqualityComparer<T>.

Właściwości

Default

Zwraca domyślny porównujący równości dla typu określonego przez argument ogólny.

Metody

Create(Func<T,T,Boolean>, Func<T,Int32>)

EqualityComparer<T> Tworzy obiekt przy użyciu określonych delegatów jako implementacji metod i GetHashCode(T) porównaniaEquals(T, T).

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
Equals(T, T)

Podczas zastępowania w klasie pochodnej określa, czy dwa obiekty typu T są równe.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetHashCode(T)

Podczas zastępowania w klasie pochodnej służy jako funkcja skrótu dla określonego obiektu dla algorytmów tworzenia skrótów i struktur danych, takich jak tabela skrótów.

GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

IEqualityComparer.Equals(Object, Object)

Określa, czy określone obiekty są równe.

IEqualityComparer.GetHashCode(Object)

Zwraca kod skrótu dla określonego obiektu.

Dotyczy

Produkt Wersje
.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.6, 2.0, 2.1
UWP 10.0

Zobacz też