[英]Custom equality comparer for Type in dictionary
由于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
- 知道如何正确编写它吗? 谢谢。
这根本不是字典的有效比较器,结果也没有明确定义。 相等比较应该是可交换的,特别a eq b
当且仅当b eq a
。 这不适用于您的情况。 同样,有效的哈希码实现声明:
那也失败了。
基本上,这是行不通的。
具体来说,来自 MSDN :
给实施者的注意事项
实现需要确保如果 Equals 方法对两个对象 x 和 y 返回true ,则 GetHashCode 方法为 x 返回的值必须等于为 y 返回的值。
Equals 方法是自反的、对称的和可传递的。 也就是说,如果用于将对象与自身进行比较,则返回true ; 真两个对象的x和y,如果它是用于y和x真; 和真正的两个对象x和z如果是Y和Z x和y的真实,也是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.