我正在使用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。有什么建议吗?
答案 0 :(得分:1)
我的猜测是一个错字 - 也许是套管?我知道这听起来微不足道,但我一直都在看......
您也可以尝试将其写为
@{ string result; }
@if (Model.MyDictionary.TryGetValue("ValidKey", out result)) {
<span>@result</span>
}
避免重复密钥的可能性,以及两次执行字典的次要性能问题。
答案 1 :(得分:0)
根据MSDN documentation 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建议的那样,所以检查拼写错误