【发布时间】:2013-01-19 00:30:47
【问题描述】:
我想使用一个类作为字典中的键,它不会覆盖 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 可用于定义自定义比较。
我不想从类派生,因为对象是使用现有类在外部创建的。
我可以创建一个包含原始类的类,但这会改变对字典的访问。
感谢您的想法!
【问题讨论】:
-
当您创建
Dictionary时,您可以为您的密钥传递IEqualityComparer<>:msdn.microsoft.com/en-us/library/ms132072.aspx -
您可以为实现所需行为的键编写一个简单的包装类,然后将包装后的键传递给字典。
-
为什么要做什么?任何类都适合作为键。
-
@MatthewWatson 不,它不会改变它,它只是告诉
Dictionary忽略实际对象的GetHashCode实现并使用您在接口中提供的方法。跨度> -
@MatthewWatson 没错,它不允许您修改
GetHashCode,但它允许您自定义比较两个键的方式,因此您可能根本不会使用GetHashCode,但其他一些公共班级成员。
标签: c# dictionary