Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Interfaz IEqualityComparer<T>

 

Publicado: octubre de 2016

Define métodos para admitir la comparación de igualdad de los objetos.

Espacio de nombres:   System.Collections.Generic
Ensamblado:  mscorlib (en mscorlib.dll)

public interface IEqualityComparer<in T>

Parámetros de tipo

inT

Tipo de objetos que se van a comparar.

NombreDescripción
System_CAPS_pubmethodEquals(T, T)

Determina si los objetos especificados son iguales.

System_CAPS_pubmethodGetHashCode(T)

Devuelve un código hash para el objeto especificado.

Esta interfaz permite la implementación de comparación de igualdad personalizada para las colecciones. Es decir, puede crear su propia definición de igualdad de tipo T, y especificar que esta definición se usa con un tipo de colección que acepte la IEqualityComparer<T> interfaz genérica. En .NET Framework, los constructores de la Dictionary<TKey, TValue> tipo de colección genérico aceptan esta interfaz.

Proporciona una implementación predeterminada de esta interfaz la Default propiedad de la EqualityComparer<T> clase genérica. La StringComparer clase implementa IEqualityComparer<T> de tipo String.

Esta interfaz admite únicamente comparaciones de igualdad. Proporciona la personalización de comparaciones para clasificar y ordenar el IComparer<T> interfaz genérica.

Se recomienda derivar desde el EqualityComparer<T> clase en lugar de implementar el IEqualityComparer<T> interfaz, porque el EqualityComparer<T> clase comprueba la igualdad utilizando el IEquatable<T>.Equals método en lugar de la Object.Equals (método). Esto es coherente con la Contains, IndexOf, LastIndexOf, y Remove métodos de la Dictionary<TKey, TValue> clase y otras colecciones genéricas.

En el ejemplo siguiente se agrega personalizada Box objetos a una colección de diccionario. El Box objetos se consideran iguales si sus dimensiones son iguales.

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.

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 2.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: