Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Interfaccia IEqualityComparer<T>

Definisce i metodi per supportare il confronto di uguaglianza di più oggetti.

Spazio dei nomi:  System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

public interface IEqualityComparer<in T>

Parametri di tipo

in T

Tipo di oggetti da confrontare.

Il parametro di questo tipo è controvariante. Ciò significa che è possibile utilizzare il tipo specificato o qualsiasi tipo meno derivato. Per ulteriori informazioni sulla covarianza e la controvarianza, vedere Covarianza e controvarianza nei generics.

Il tipo IEqualityComparer<T> espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreEqualsDetermina se gli oggetti specificati sono uguali.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetHashCodeViene restituito un codice hash per l'oggetto specificato.
In alto

Questa interfaccia consente l'implementazione del confronto di uguaglianza personalizzato per gli insiemi. In altre parole, è possibile creare una definizione personalizzata di uguaglianza per il tipo T e specificare che questa definizione venga utilizzata per un tipo di insieme che accetti l'interfaccia generica IEqualityComparer<T>. In .NET Framework, i costruttori del tipo di insieme generico Dictionary<TKey, TValue> accettano questa interfaccia.

Un'implementazione predefinita di questa interfaccia è fornita dalla proprietà Default della classe generica EqualityComparer<T>. La classe StringComparer implementa l'interfaccia generica IEqualityComparer<T> di tipo String.

Questa interfaccia supporta solo i confronti di uguaglianza. Per effettuare la personalizzazione dei confronti di ordinamento è possibile utilizzare l'interfaccia generica IComparer<T>.

Poiché la classe EqualityComparer<T> verifica l'uguaglianza utilizzando il metodo IEquatable<T>.Equals anziché il metodo Object.Equals è consigliabile derivare dalla classe EqualityComparer<T> anziché implementare l'interfaccia IEqualityComparer<T>. È coerente con i metodi Contains, IndexOf, LastIndexOf e Remove della classe Dictionary<TKey, TValue> e altre collezioni generiche.

Nell'esempio riportato di seguito vengono aggiunti oggetti Box personalizzati a un insieme dizionario. Gli oggetti Box sono considerati uguali se hanno le stesse dimensioni.


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

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato 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 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft