我有:
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())
会起作用,但在这种情况下不会。
答案 0 :(得分:1)
如果没有弄错,Dictionary contructor重载需要IEqualityComparer
public Dictionary(IEqualityComparer<TKey> comparer);
在您的代码中传递“TValue的IEqualityComparer”,您只能比较字典中的键而不是值