本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

IEqualityComparer<T> 接口

 

定义用于支持比较对象是否相等的方法。

命名空间:   System.Collections.Generic
程序集:  mscorlib(位于 mscorlib.dll)

public interface IEqualityComparer<in T>

类型参数

inT

要比较的对象的类型。

名称说明
System_CAPS_pubmethodEquals(T, T)

确定指定的对象是否相等。

System_CAPS_pubmethodGetHashCode(T)

返回指定对象的哈希代码。

此接口允许对集合的自定义的相等比较的实现。 也就是说,可以创建您自己的定义的类型的相等性 T, ,并指定与接受的集合类型会使用此定义 IEqualityComparer<T> 泛型接口。 在.NET Framework 中,构造函数的 Dictionary<TKey, TValue> 接受此接口的泛型集合类型。

此接口的默认实现提供通过 Default 属性 EqualityComparer<T> 泛型类。 StringComparer 类实现 IEqualityComparer<T> 类型的 String

此接口仅支持相等性比较。 通过提供自定义的筛选和排序比较 IComparer<T> 泛型接口。

我们建议您从派生 EqualityComparer<T> 类而不是实现 IEqualityComparer<T> 接口,因为 EqualityComparer<T> 类测试相等性使用 IEquatable<T>.Equals 方法而不是 Object.Equals 方法。 这是与一致 Contains, ,IndexOf, ,LastIndexOf, ,和 Remove 方法 Dictionary<TKey, TValue> 类和其他泛型集合。

下面的示例添加自定义 Box 字典集合的对象。 Box 对象被视为相等,如果它们的尺寸相同。

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.

通用 Windows 平台
自 8 起可用
.NET Framework
自 2.0 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用
返回页首
显示: