繁体   English   中英

Dictionary.ContainsKey引发KeyNotFoundException

[英]Dictionary.ContainsKey Throws KeyNotFoundException

我正在使用ASP.Net MVC和剃刀创建一个网页。 在我的cshtml文件中,我正在检查字典中是否存在键。 如果键不存在,则页面崩溃,并且我收到KeyNotFoundException。

我的模特

Dictionary<string,string> MyDictionary = new Dictionary<string,string>(){
 { "ValidKey", "ValidValue"}
};

CSHTML代码

@if (Model.MyDictionary.ContainsKey("ValidKey")) {
  <span>@Model.MyDictionary["ValidKey"]</span>
}
@if (Model.MyDictionary.ContainsKey("InvalidKey")) {
  <span>@Model.MyDictionary["InvalidKey"]</span>
}

第一个检查工作正常,但第二个崩溃。 我不明白为什么尝试检查密钥时会得到KeyNotFoundException。 有什么建议么?

我的猜测可能是拼写错误-也许是大小写? 我知道这听起来很琐碎,但我一直都在看...

您也可以尝试将其编写为

@{ string result; }
@if (Model.MyDictionary.TryGetValue("ValidKey", out result)) {
<span>@result</span>
}

为避免可能会重复复制密钥以及两次执行字典的次要性能问题。

根据MSDN文档, ContainsKey实际上从不抛出KeyNotFoundException,这在直觉上是有道理的,因为ContainsKey的重点是检查密钥是否存在。

用我自己的代码进行测试以尝试重现该问题并未显示任何问题:

var dict = new Dictionary<string, string>();
dict.Add("ValidKey", "Valid Value");

string validKey = "ValidKey";
string invalidKey = "InvalidKey";

//Outputs "Valid Value"
if (dict.ContainsKey(validKey))
{
    Console.WriteLine(dict[validKey]);
}
//Outputs nothing and throws no exception
if (dict.ContainsKey(invalidKey))
{
    Console.WriteLine(dict[invalidKey]);
}

请注意,我将键设置为变量以避免@Steve Cooper在其答案中指出的潜在问题。

您可能正在发生的事情是,您不小心尝试访问与您实际检查的密钥不同的密钥,就像@Steve Cooper建议的那样,因此请检查错别字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM