繁体   English   中英

用于输入字典的自定义相等比较器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM