0

我有:

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())会起作用,但在这种情况下不会。

4

1 回答 1

1

如果没记错字典构造函数重载需要 IEqualityComparer

public Dictionary(IEqualityComparer<TKey> comparer);

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

于 2013-07-12T08:07:10.397 回答