即使在检查为null之后,Dictionary也会引发异常

时间:2011-03-28 17:43:40

标签: c# .net dictionary exception-handling

我正在尝试从字典中读取键的值,如下所示:

if (myDic["myKey"] != null)
{
}

我可以看到我正在检查null,但即使这样它也会抛出KeyNotFoundException。我该怎么检查呢?请指教!

8 个答案:

答案 0 :(得分:9)

看起来您将HashTable的行为与Dictionary<TKey, TValue>的行为混淆了。如果密钥不存在,HashTable类将返回null值,而Dictionary<TKey, TValue>将抛出异常。

您需要使用ContainsKeyTryGetValue来避免此问题。

object value;
if (myDic.TryGetValue("apple", out value)) {
  ...
}

答案 1 :(得分:6)

使用

if(mydic.ContainsKey("myKey"))

答案 2 :(得分:3)

它会抛出异常,因为您正在尝试检索该项的值(检查该值是否为null),但由于该键不存在,因此无法重试该值。

使用:

if (myDic.ContainsKey("myKey")) {
}

或:

if (myDic.TryGetValue("myKey", out value)) {
}

答案 3 :(得分:1)

使用:

if (myDic.ContainsKey("myKey"))  
{
}

答案 4 :(得分:1)

答案 5 :(得分:1)

您正在检查与“apple”键关联的值是否不是null,而不是字典包含键“apple”。为此您需要使用:

if( myDic.ContainsKey("apple") )
{

}

答案 6 :(得分:0)

你应该在这里使用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检查然后再进行第二次调用价值。

答案 7 :(得分:0)

最简洁的方法可能如下:

SomeType myVal;
if(myDic.TryGetValue("myKey",out myVal))
{
    //good to go
}