C# C Dictionary.ContainsKey()始终返回false
我有一个字典,每次调用ContainsKey方法时,它都返回false。以下面的例子为例C# C Dictionary.ContainsKey()始终返回false,c#,.net,.net-4.0,dictionary,C#,.net,.net 4.0,Dictionary,我有一个字典,每次调用ContainsKey方法时,它都返回false。以下面的例子为例 Boolean found = dict.ContainsKey(new Group("group1", "test")); 如果visual studio调试器显示dict中存在名为group1且类型为test的组,则找到的变量为false。发生了什么 我的组类有两个字符串字段type和name,我重写了Equals方法 public override bool Equals(object obj)
Boolean found = dict.ContainsKey(new Group("group1", "test"));
如果visual studio调试器显示dict中存在名为group1且类型为test的组,则找到的变量为false。发生了什么
我的组类有两个字符串字段type和name,我重写了Equals方法
public override bool Equals(object obj)
{
Group otherGroup = (Group)obj;
return this.name == otherGroup.name && this.type == otherGroup.type;
}
你应该重写
包含2个字符串属性的类的HashMethod示例
public override int GetHashCode()
{
unchecked
{
return ((name != null ? name.GetHashCode() : 0)*397) ^ (type != null ? type.GetHashCode() : 0);
}
}
你应该重写
包含2个字符串属性的类的HashMethod示例
public override int GetHashCode()
{
unchecked
{
return ((name != null ? name.GetHashCode() : 0)*397) ^ (type != null ? type.GetHashCode() : 0);
}
}
您需要重写GetHashCode:
GetHashCode基于当前实例返回一个值,该值适用于哈希算法和数据结构(如哈希表)。相同类型且相等的两个对象必须返回相同的哈希代码,以确保System.Collections.HashTable和System.Collections.Generic.Dictionary的实例正常工作
您需要重写GetHashCode:
GetHashCode基于当前实例返回一个值,该值适用于哈希算法和数据结构(如哈希表)。相同类型且相等的两个对象必须返回相同的哈希代码,以确保System.Collections.HashTable和System.Collections.Generic.Dictionary的实例正常工作
我知道这个问题已经有了一个公认的答案,但我也将分享我肮脏的解决方案
Boolean found =
dict.Keys.Any(key =>
key.Equals("key", StringComparison.InvariantCultureIgnoreCase));
我知道这个问题已经有了一个公认的答案,但我也将分享我肮脏的解决方案
Boolean found =
dict.Keys.Any(key =>
key.Equals("key", StringComparison.InvariantCultureIgnoreCase));
GetHashCode也被重写了吗?看起来您被烧死了。请参阅:如果重写Equals,则应始终重写GetHashCode,以便它为组对象返回唯一值。另外,副本:@CoryLarson感谢您的问题参考;我在我的Search中找不到该值,GetHashCode也被覆盖了?看起来您被烧死了。请参阅:如果覆盖Equals,则应始终覆盖GetHashCode,以便它为组对象返回唯一值。另外,副本:@CoryLarson感谢您的问题参考;我在我的搜索中没有找到我是C新手未选中的关键字有什么作用?另外,为什么只将名称哈希代码乘以397?unchecked关键字用于禁止整数类型算术运算和转换的溢出检查。397是一个素数。我知道你为什么选择使用397,但我不明白为什么你只将名称哈希代码乘以397,而不将类型哈希代码乘以397?这个哈希方法是由Resharper生成的。我认为你应该直接问他们;我是C新手,unchecked关键字做什么?另外,为什么只将名称哈希代码乘以397?unchecked关键字用于禁止整数类型算术运算和转换的溢出检查。397是一个素数。我知道你为什么选择使用397,但我不明白为什么你只将名称哈希代码乘以397,而不将类型哈希代码乘以397?这个哈希方法是由Resharper生成的。我认为你应该直接问他们;