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

本文关键字:返回 false containskey 关键字 字典 | 更新日期: 2023-09-27 17:59:04

我想检查字典是否包含关键字,但当我知道关键字在字典中时,它总是返回false

    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));
}

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

  • 你是说如果/如果/其他,不是说如果/其他吗
  • 我想这就是为什么它为所有蓝色奖品输出"未找到奖品"的原因(它总是在其他奖品的决赛中分支)

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

  • 操作流和读卡器时首选"使用"指令(SQLiteDataReader)
  • 类nmae应该以大写字母开头:BlueInfo,YellowInfo
  • 调用Program.blueprizes.TryAdd而不检查返回的布尔值?那你怎么知道电话成功了?(出于多种原因,在并发词典中可能不会出现这种情况)

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