C#Dictionary.ContainsKey()始终返回false

时间:2011-09-19 19:39:27

标签: c# .net .net-4.0 dictionary

我有一个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;
}

3 个答案:

答案 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));