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;
}

c# Dictionary.ContainsKey()总是返回false

你应该重写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));