Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Interfaccia IEqualityComparer<T>

 

Data di pubblicazione: ottobre 2016

Definisce i metodi per supportare il confronto di oggetti allo scopo di verificarne l'uguaglianza.

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

public interface IEqualityComparer<in T>

Parametri tipo

inT

Tipo di oggetti da confrontare.

NomeDescrizione
System_CAPS_pubmethodEquals(T, T)

Determina se gli oggetti specificati sono uguali.

System_CAPS_pubmethodGetHashCode(T)

Restituisce un codice hash per l'oggetto specificato.

Questa interfaccia consente l'implementazione del confronto di uguaglianza personalizzato per le raccolte. Vale a dire, è possibile creare la definizione di uguaglianza per il tipo T, e specificare che questa definizione venga utilizzata con un tipo di insieme che accetta il IEqualityComparer<T> interfaccia generica. In .NET Framework, costruttori del Dictionary<TKey, TValue> tipo di insieme generico accettano questa interfaccia.

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

Questa interfaccia supporta solo confronti di uguaglianza. La personalizzazione dei confronti per l'ordinamento viene fornita per il IComparer<T> interfaccia generica.

Si consiglia di eseguire la derivazione dal EqualityComparer<T> classe anziché implementare la IEqualityComparer<T> interfaccia, poiché la EqualityComparer<T> classe verifica l'uguaglianza utilizzando il IEquatable<T>.Equals metodo invece il Object.Equals (metodo). Questo comportamento è coerente con il Contains, IndexOf, LastIndexOf, e Remove metodi la Dictionary<TKey, TValue> classe e altre raccolte generiche.

Nell'esempio seguente aggiunge personalizzato Box oggetti a una raccolta dizionario. Il Box gli oggetti sono considerati uguali se hanno le stesse dimensioni.

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
Disponibile da 8
.NET Framework
Disponibile da 2.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: