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

时间:2012-10-16 05:25:26

标签: c# dictionary

嘿,我有以下代码

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

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

“字典中没有给定的密钥”

3 个答案:

答案 0 :(得分:13)

您正在尝试独立检索密钥(如果存在)。尝试将代码更改为:

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

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

答案 1 :(得分:4)

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

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

        return result;
    }

答案 2 :(得分:1)

一个简单的'别人'会为你完成这项工作。如果键为null,ContainsKey()方法抛出此异常!你最好也处理它。

        try
        {
            if(dictionary.ContainsKey(item))
            {
                MessageBox.Show("Retrieving" + item.ToString());
            }            
            else
            {
                MessageBox.Show("Value not found!");
                return null;
            }
        }
        catch(KeyNotFoundException)
        {
            MessageBox.Show("Null key!");
            return null; 
        }