İngilizce dilinde oku

Aracılığıyla paylaş


EqualityComparer<T> Sınıf

Tanım

Genel arabirimin uygulamaları IEqualityComparer<T> için bir temel sınıf sağlar.

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

Tür Parametreleri

T

Karşılaştıracak nesne türü.

Devralma
EqualityComparer<T>
Öznitelikler
Uygulamalar

Örnekler

Aşağıdaki örnek, eşitlik karşılaştırıcısı ile türdeki Box nesnelerden oluşan bir sözlük koleksiyonu oluşturur. Boyutları aynıysa iki kutu eşit kabul edilir. Ardından kutuları koleksiyona ekler.

Sözlük, eşitliği farklı bir şekilde tanımlayan bir eşitlik karşılaştırıcısıyla yeniden oluşturulur: Birimleri aynıysa iki kutu eşit olarak kabul edilir.

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.
 *
*/

Açıklamalar

Genel sınıf gibi koleksiyon sınıflarıyla veya gibi yöntemlerle List<T>.Sortkullanmak üzere genel arabirimin özel bir uygulamasını IEqualityComparer<T> sağlamak için bu sınıftan Dictionary<TKey,TValue> türetilir.

özelliği, Default türün TSystem.IEquatable<T> genel arabirimi uygulayıp uygulamadığını denetler ve uygulanıyorsa yönteminin IEquatable<T>.Equals uygulamasını çağıran bir EqualityComparer<T> döndürür. Aksi takdirde, tarafından Tsağlanan bir EqualityComparer<T>döndürür.

.NET 8 ve sonraki sürümlerde, bu tür örnekleri oluşturmak için yöntemini kullanmanızı EqualityComparer<T>.Create(Func<T,T,Boolean>, Func<T,Int32>) öneririz.

Oluşturucular

EqualityComparer<T>()

EqualityComparer<T> sınıfının yeni bir örneğini başlatır.

Özellikler

Default

Genel bağımsız değişken tarafından belirtilen tür için varsayılan eşitlik karşılaştırıcısını döndürür.

Yöntemler

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

Karşılaştırıcının Equals(T, T) ve GetHashCode(T) yöntemlerinin uygulaması olarak belirtilen temsilcileri kullanarak bir EqualityComparer<T> oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
Equals(T, T)

Türetilmiş bir sınıfta geçersiz kılındığında, türündeki T iki nesnenin eşit olup olmadığını belirler.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetHashCode(T)

Türetilmiş bir sınıfta geçersiz kılındığında, karma tablo gibi karma algoritmalar ve veri yapıları için belirtilen nesne için karma işlevi görür.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

IEqualityComparer.Equals(Object, Object)

Belirtilen nesnelerin eşit olup olmadığını belirler.

IEqualityComparer.GetHashCode(Object)

Belirtilen nesne için bir karma kodu döndürür.

Şunlara uygulanır

Ürün Sürümler
.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

Ayrıca bkz.