我有一个Dictionary,每次调用ContainsKey方法时都返回false。采取以下示例
Boolean found = dict.ContainsKey(new Group("group1", "test"));
找到的变量是false,尽管visual studio调试器显示在dict中存在名为“group1”且类型为“test”的组。发生了什么事?
我的Group类有两个String字段(类型和名称),我重写了Equals方法
public override bool Equals(object obj)
{
Group otherGroup = (Group)obj;
return this.name == otherGroup.name && this.type == otherGroup.type;
}
答案 0 :(得分:4)
您应该覆盖GetHashCode method
包含2个字符串属性的类的HashMethod示例
public override int GetHashCode()
{
unchecked
{
return ((name != null ? name.GetHashCode() : 0)*397) ^ (type != null ? type.GetHashCode() : 0);
}
}
答案 1 :(得分:4)
您需要覆盖GetHashCode()
:
http://msdn.microsoft.com/en-us/library/ms182358(v=vs.80).aspx
GetHashCode返回一个基于当前实例的值,该实例适用于散列算法和数据结构(如哈希表)。两个相同类型且相同的对象必须返回相同的哈希代码,以确保System.Collections.HashTable和 System.Collections.Generic.Dictionary 的实例正常工作。
答案 2 :(得分:0)
我知道这个问题已经接受了答案,但我也会分享我的脏解决方案。
Boolean found =
dict.Keys.Any(key =>
key.Equals("key", StringComparison.InvariantCultureIgnoreCase));