我想在不覆盖 Equals 或 GetHashCode 的字典中使用一个类作为键。这是一个来自外部库的类,我不想修改。
所以我想知道我是否可以只为一个字典使用自定义“GetHashCode”/“Equals”实现?我想知道是否可以使用 C++ std::maps 之类的东西
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<T>, // map::key_compare
class Alloc = allocator<T> > // map::allocator_type
> class map;
其中 Compare 可用于定义自定义比较。
我不想从类派生,因为对象是使用现有类在外部创建的。
我可以创建一个包含原始类的类,但这会改变对字典的访问。
感谢您的想法!
最佳答案
当然 - 您可以实现 IEqualityComparer<T>
并将其传递给 the Dictionary<,>
constructor .这正是该构造函数的目的:)
例如:
public FooByNameEqualityComparer : IEqualityComparer<Foo>
{
public int GetHashCode(Foo foo)
{
return foo.Name.GetHashCode();
}
public bool Equals(Foo x, Foo y)
{
return x.Name == y.Name;
}
}
...
Dictionary<Foo, int> map = new Dictionary<Foo, int>(new FooByNameComparer());
关于c# - 使用 "external"GetHashCode 和等于字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14403187/