我正在尝试从以下字典中读取键的值:
if (myDic["myKey"] != null)
{
}
我可以看到我正在检查 null,但是即使这样它仍然会抛出 KeyNotFoundException。我应该如何检查?请给予建议!
if (myDic["myKey"] != null)
{
}
我可以看到我正在检查 null,但是即使这样它仍然会抛出 KeyNotFoundException。我应该如何检查?请给予建议!
看起来你把 HashTable
的行为和 Dictionary<TKey, TValue>
搞混了。当键不存在时,HashTable
类将返回一个 null
值,而 Dictionary<TKey, TValue>
则会引发异常。
你需要使用 ContainsKey
或 TryGetValue
来避免这个问题。
object value;
if (myDic.TryGetValue("apple", out value)) {
...
}
使用
if(mydic.ContainsKey("myKey"))
这个异常是因为您尝试检索该项的值(检查该值是否为空),但无法检索该值,因为该键不存在。
解决方法:
if (myDic.ContainsKey("myKey")) {
}
或者:
if (myDic.TryGetValue("myKey", out value)) {
}
if (myDic.ContainsKey("myKey"))
{
}
您正在检查与键“apple”关联的值是否不为null
,而不是字典是否包含键“apple”。要实现这一点,您需要使用:
if( myDic.ContainsKey("apple") )
{
}
IDictionary.Contains
http://msdn.microsoft.com/en-us/library/system.collections.idictionary.contains.aspx
在这里,你应该使用Contains或TryGetValue。
if (myDic.ContainsKey)
{
// get value out of dictionary
var myValue = myDic["myKey"];
}
或者
string myValue;
if (myDic.TryGetValue("myKey", out myValue)
{
// do something with myValue
}
[上面的例子假设您的字典具有字符串类型的值,但它可以是任何类型]
第二种方法的优点是您可以在单个原子操作中检查项目是否存在于字典中并获取其值,而不是首先进行Contains
检查,然后再进行第二次调用以获取该值。
这可能是最简洁的做法:
SomeType myVal;
if(myDic.TryGetValue("myKey",out myVal))
{
//good to go
}
out
引用。 - Roly