由于Int32
是 Object
,我希望打印" True"
Dictionary<Type, string> dict = new Dictionary<Type, string>(new MyComparer());
dict[typeof(object)] = "Hello";
Console.WriteLine(dict.ContainsKey(typeof(int))); // currently prints false :(
这是我尝试的比较器:
public class MyComparer : IEqualityComparer<Type>
{
public bool Equals(Type x, Type y)
{
return y.IsAssignableFrom(x);
}
public int GetHashCode(Type obj)
{
return obj.GetHashCode();
}
}
但它没有用。我不确定在GetHashCode
中要返回什么内容 - 我知道在调试时我的错误原因我甚至没有达到Equals
- 任何想法如何正确地写这个?感谢。
答案 0 :(得分:6)
这对字典来说根本不是一个有效的比较器,结果没有明确定义。平等比较应该是可交换的,特别是a eq b
当且仅当 b eq a
时。这不适用于您的情况。同样,有效的哈希代码实现声明:
那也失败了。
基本上,这不会起作用。
具体来说,from MSDN:
对实施者的说明
需要实现以确保如果Equals方法为两个对象x和y返回 true ,则x的GetHashCode方法返回的值必须等于为y返回的值。
Equals方法具有反身性,对称性和传递性。也就是说,如果用于将对象与自身进行比较,则返回 true ; true 表示两个对象x和y,如果y和x为 true ;两个对象x和z的 true ,如果x和y为 true ,y和z为 true 。