嘿,我有以下代码
public object RetrieveItemRun(int item)
{
if (dictionary.ContainsKey(item))
{
MessageBox.Show("Retrieving" + item.ToString());
}
return dictionary[item];
}
当尝试获取0的键时,它总是崩溃,消息框确实显示所以ContainsKey方法为true,但是当我尝试从键中检索值时崩溃说:
“字典中没有给定的密钥”
答案 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;
}