Dictionary.ContainsKey Throws KeyNotFoundException

本文关键字:KeyNotFoundException Throws ContainsKey Dictionary | 更新日期: 2023-09-27 18:25:40

我正在使用ASP.Net MVC和razor创建一个网页。在我的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。有什么建议吗?

Dictionary.ContainsKey Throws 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所建议的那样,你无意中试图访问与实际检查的密钥不同的密钥,所以请检查是否存在拼写错误

相关文章:
  • 没有找到相关文章