如何对字典值实现比较器

本文关键字:实现 比较器 字典 | 更新日期: 2023-09-27 18:22:01

我有:

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;
            }
        }
    }
}

我需要把这个比较器传给字典上的contains,但我很吃力。我看到字典在构造函数中实现了IEqualityComparer,但是:

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

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

我想我需要在某个地方实现一些KeyValuePair类型,但我不确定在哪里。

如果我在普通的List<MyClass>上这样做,那么List.Contains(Obj, new MyClass.Comparer())会工作,但在这种情况下不会。

如何对字典值实现比较器

如果没有弄错,字典构造函数重载需要IEqualityComparer

public Dictionary(IEqualityComparer<TKey> comparer);

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

中的值进行比较