【发布时间】:2011-05-25 19:05:06
【问题描述】:
我的问题是 ContainsKey 始终返回 false,即使它们已添加密钥并且 .Equals 的计算结果为 true。
我有以下课程:
public class StatisticsFilter
{
private String someString1;
private String someString2;
.....
public override string ToString()
{
return string.Format("{0}-{1}-{2}-{3}-{4}", someString1, someString2, ...)
}
public override bool Equals(object obj)
{
return obj.ToString().Equals(ToString());
}
public override int GetHashCode()
{
return ToString().GetHashCode();
}
}
然后我有一个看起来像这样的字典:
private readonly IDictionary<StatisticsFilter, Statistics> _filteredStatisticsDict =
new Dictionary<StatisticsFilter, Statistics>();
....
{
// ALWAYS EVALUATES TO FALSE!
if (_filteredStatisticsDict.ContainsKey(statisticsFilter) == false)
{
_filteredStatisticsDict.Add(statisticsFilter, new Statistics());
}
}
【问题讨论】:
-
那么问题肯定出在你的
GetHashCode上。它是否总是为同一个实例返回相同的值? -
你传递的是key还是类的实例?
-
等等,
ContainsKey(statisticsFilter)评估为 false,还是ContainsKey(statisticsFilter) == false评估为 false?
标签: c# dictionary equality containskey