c# Dictionary.ContainsKey()总是返回false
本文关键字:返回 false Dictionary ContainsKey | 更新日期: 2023-09-27 18:09:15
我有一个字典,每次我调用ContainsKey方法它返回false。以以下示例
为例 Boolean found = dict.ContainsKey(new Group("group1", "test"));
找到的变量为false,即使visual studio调试器显示dict中存在名称为"group1"且类型为"test"的Group。发生了什么事?
我的Group类有两个String字段(类型和名称),我覆盖了Equals方法
public override bool Equals(object obj)
{
Group otherGroup = (Group)obj;
return this.name == otherGroup.name && this.type == otherGroup.type;
}
你应该重写GetHashCode方法
包含两个字符串属性的类的HashMethod示例
public override int GetHashCode()
{
unchecked
{
return ((name != null ? name.GetHashCode() : 0)*397) ^ (type != null ? type.GetHashCode() : 0);
}
}
您需要重写GetHashCode()
:
http://msdn.microsoft.com/en-us/library/ms182358 (v = vs.80) . aspx
GetHashCode返回一个基于当前实例的值,该值适合散列算法和数据结构(如散列表)。相同类型且相等的两个对象必须返回相同的哈希码,以确保System.Collections.HashTable和System.Collections.Generic的实例。字典工作正常
我知道这个问题已经有一个公认的答案,但是我也将分享我的肮脏的解决方案。
Boolean found =
dict.Keys.Any(key =>
key.Equals("key", StringComparison.InvariantCultureIgnoreCase));