即使key在字典中,containskey也总是返回false

时间:2014-04-21 01:16:21

标签: c# dictionary

我想检查字典是否包含密钥,但是当我知道密钥在字典中时我总是返回false我做了一些研究并且覆盖了equals和hashchecks似乎做了我需要但我无法得到它工作可以有人帮助我请在这里检查密钥和字典对象的代码

    public static ConcurrentDictionary<string, blueinfo> blueprizes = new ConcurrentDictionary<string, blueinfo>();
    public static ConcurrentDictionary<string, yellowinfo> yellowprizes = new ConcurrentDictionary<string, yellowinfo>();

    public static List<string[]> ExecuteStringCommand(SQLiteCommand command, int columncount)
    {
            List<string[]> values = new List<string[]>();
            SQLiteDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                List<string> row = new List<string>();
                row.Add("f2e135cdfb28407081bcca9a99a3148b");
                if (Program.blueprizes.ContainsKey(row[0]))//line always returns false
                    row.Add(Program.blueprizes[row[0]].Name1);
                if (Program.yellowprizes.ContainsKey(row[0]))//line always returns false
                    row.Add(Program.yellowprizes[row[0]].Name2);
                else
                    row.Add("Prize not found");
                values.Add(row.ToArray());
            }
            reader.Close();
            return values;
    }

class blueinfo
{
    static List<string> row = new List<string>();
    public blueinfo(string[] dbdata)
    {
        Name1 = dbdata[0];
        Id1 = dbdata[1];
        row.Add(dbdata[1]);
    }
    public string Name1 { get; set; }
    public string Id1 { get; set; }
    public static string[] dbdata1
    {
        get { return row.ToArray(); }
    }

}

class yellowinfo
{
    public yellowinfo(string[] dbdata)
    {
        Name2 = dbdata[0];
        Id2 = dbdata[1];
    }

    public string Name2 { get; set; }
    public string Id2 { get; set; }
}

这是添加项目的代码:

List<string[]> values = new List<string[]>();
line="prize 1=f2e135cdfb28407081bcca9a99a3148b"
values.Add(line.Split('='));

foreach (string[] row in values)
{
    if (blue == true)
        Program.blueprizes.TryAdd(row[1], new blueinfo(row));
    else
        Program.yellowprizes.TryAdd(row[1], new yellowinfo(row));
}

2 个答案:

答案 0 :(得分:1)

  • 如果是/ if / else,你的意思是不是/ elseif / else?
  • 我想这就是为什么它输出&#34;没有找到奖品&#34;所有蓝色奖品(它总是分支给他们的最后一个)

代码中的许多错误/缺陷:

  • 然后选择&#34;使用&#34;操作流和读者时的指令(SQLiteDataReader)
  • class nmae应该以大写字母开头:BlueInfo,YellowInfo
  • 你调用Program.blueprizes.TryAdd而不检查返回的布尔值?那你怎么知道这个电话成功了? (并发字典可能不是很多原因)

答案 1 :(得分:-1)

当您添加正在使用row[1]的项目时,以及当您检查所使用的密钥时row[0]。也许这就是问题?我不知道row[0]row[1]是什么,但它们可能不完全相同。

相关问题