IEqualityComparer(T) Interfaz
TOC
Collapse the table of content
Expand the table of content
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

IEqualityComparer<T> (Interfaz)

 

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

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

public interface IEqualityComparer<in T>

Parámetros de tipo

in T

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 personalizada en concepto de igualdad para colecciones.Esto es, puede crear su propia definición de igualdad para el tipo T y especificar que esta definición se utilice con un tipo de colección que admita la interfaz genérica IEqualityComparer<T>.En .NET Framework, los constructores del tipo de colección genérica Dictionary<TKey, TValue> aceptan esta interfaz.

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

Esta interfaz sólo admite comparaciones de igualdad.La interfaz genérica IComparer<T> proporciona la personalización de comparaciones para clasificar y ordenar.

Recomendamos que se derive de la clase EqualityComparer<T> en lugar de implementar la interfaz IEqualityComparer<T>, porque las pruebas de clase EqualityComparer<T> para igualdad usan el método IEquatable<T>.Equals en lugar del método Object.Equals.Esto es coherente con los métodos Contains, IndexOf, Remove y LastIndexOf de la clase Dictionary<TKey, TValue> y otras colecciones genéricas.

En el ejemplo siguiente se agregan objetos Box personalizados a una colección de diccionarios.Los objetos Box se consideran iguales si tienen las mismas dimensiones.

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
Disponible desde 4.5
.NET Framework
Disponible desde 2.0
Portable Class Library
Compatible con: portable .NET platforms
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar:
© 2016 Microsoft