3

嘿,我有以下这样的代码

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

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

“给定的键不在字典中”

4

3 回答 3

14

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

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

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

于 2012-10-16T05:31:25.800 回答
5

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

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

        return result;
    }
于 2012-10-16T05:41:28.247 回答
1

一个简单的“其他”将为您完成这项工作。如果键为空, 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; 
        }
于 2012-10-16T05:55:59.377 回答