如何在字典值上实现比较器

时间:2013-07-12 08:01:14

标签: c# dictionary iequalitycomparer

我有:

Dictionary<int, MyClass> ItemList = new Dictionary<int, MyClass>();

MyClass类似于:

public class MyClass
{
    public int BaseItemID;
    public string Description;


    public MyClass()
    {
    }

    public class Comparer : IEqualityComparer<MyClass>
    {
        public bool Equals(MyClass x, MyClass y)
        {
            if (ReferenceEquals(x, y))
                return true;
            else if (x == null || y == null)
                return false;
            return x.BaseItemID == y.BaseItemID;
        }

        public int GetHashCode(MyClass obj)
        {
            unchecked
            {
                int hash = 17;
                hash = hash * 23 + obj.BaseItemID.GetHashCode();
                return hash;
            }
        }
    }
}

我需要将这个比较器传递给字典中的包含但是我正在努力。我看到字典在构造函数中实现了IEqualityComparer,但是:

Dictionary<int, MyClass> ItemList = new Dictionary<int, MyClass>(new MyClass.Comparer());

似乎不起作用,并在编译时引发错误。

我假设我需要在某处实现一些KeyValuePair类型,但我不确定在哪里。

如果我在正常List<MyClass>上执行此操作,那么List.Contains(Obj, new MyClass.Comparer())会起作用,但在这种情况下不会。

1 个答案:

答案 0 :(得分:1)

如果没有弄错,Dictionary contructor重载需要IEqualityComparer

public Dictionary(IEqualityComparer<TKey> comparer);

在您的代码中传递“TValue的IEqualityComparer”,您只能比较字典中的键而不是值