vex*_*exe 2 c# dictionary iequalitycomparer
既然Int32 是a 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 :(
Run Code Online (Sandbox Code Playgroud)
这是我试过的比较器:
public class MyComparer : IEqualityComparer<Type>
{
public bool Equals(Type x, Type y)
{
return y.IsAssignableFrom(x);
}
public int GetHashCode(Type obj)
{
return obj.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我不太清楚要返回什么GetHashCode- 我知道这是错误的原因,当调试我甚至没有达到Equals- 任何想法如何写这个正确?谢谢.
这根本不是字典的有效比较器,结果没有明确定义.平等比较应该是可交换的,特别是a eq b 当且仅当 b eq a.这不适用于您的情况.同样,有效的哈希代码实现声明:
那也失败了.
基本上,这是行不通的.
具体来说,来自MSDN:
对实施者的说明
需要实现以确保如果Equals方法对于两个对象x和y 返回true,则x的GetHashCode方法返回的值必须等于为y返回的值.
Equals方法是自反,对称和传递的.也就是说,如果用于将对象与自身进行比较,则返回true ; 真两个对象的x和y,如果它是真实为y和x; 和真正的两个对象x和z,如果它是真实的 x和y,并真正为y和z.
| 归档时间: |
|
| 查看次数: |
4736 次 |
| 最近记录: |