字典包含键,但崩溃说它没有

Thi*_*ngs 2 c# dictionary

嘿,我有这样的代码

public object RetrieveItemRun(int item)
{
    if (dictionary.ContainsKey(item))
    {
        MessageBox.Show("Retrieving" + item.ToString());
    }
    return dictionary[item];
}
Run Code Online (Sandbox Code Playgroud)

当尝试获取0的键时它总是崩溃,消息框确实显示所以ContainsKey方法为真,但当我尝试从键中检索值时它崩溃说:

"给定的密钥不在字典中"

小智 14

您正试图独立检索密钥是否存在.尝试将代码更改为:

   public object RetrieveItemRun(int item)
    {
        if (dictionary.ContainsKey(item))
        {
            MessageBox.Show("Retrieving" + item.ToString());
            return dictionary[item];
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

如果存在,则返回该项目.原始代码返回假设项目退出(外部检查)

  • 另外,对于速度,使用`Dictionary.TryGetValue(key,out ref item)`,这是一个单一的查找操作.使用`ContainsKey`然后通过索引器访问该值意味着两个查找操作. (2认同)

cuo*_*gle 5

您还可以使用TryGetValue方法来避免异常:

    public object RetrieveItemRun(int item)
    {
        object result;
        if (dictionary.TryGetValue(item, out result))
        {
            MessageBox.Show("Retrieving" + item);
        }

        return result;
    }
Run Code Online (Sandbox Code Playgroud)