C# Dictionary ContainsKey



我的问题是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());
    }
}

无法使用您给我们的代码进行复制。

using System;
using System.Collections.Generic;
public class StatisticsFilter 
{
    private String someString1;
    private String someString2;
    public StatisticsFilter(string x, string y)
    {
        this.someString1 = x;
        this.someString2 = y;
    }
    public override string ToString()
    {
        return string.Format("{0}-{1}xyz", someString1, someString2);
    }
    public override bool Equals(object obj)
    {            
        return obj.ToString().Equals(ToString());
    }
    public override int GetHashCode()
    {
        return ToString().GetHashCode();
    }
}
class Test
{
    static void Main()
    {
        var dict = new Dictionary<StatisticsFilter, int>();
        var sf1 = new StatisticsFilter("hello", "there");
        var sf2 = new StatisticsFilter("hello", "there");
        dict[sf1] = 10;
        Console.WriteLine(dict.ContainsKey(sf2)); // Prints true
    }
}

是否期望"ToString()"是键?我认为通过将Dictionary声明更改为:Dictionary<string, Statistics> ,您将获得所需的结果

// not always be false
if (_filteredStatisticsDict.ContainsKey(statistics.ToString() == false)
{
    _filteredStatisticsDict.Add(statisticsFilter.ToString(), newStatisitcs());
}

如果我理解你想要实现的目标,这应该会奏效。使用此方法,字典关键字基于筛选器的内容。

相关内容

  • 没有找到相关文章

最新更新