2015-12-04 33 views
0

我正在創建一個使用ASP.Net MVC和剃鬚刀的網頁。在我的cshtml文件中,我正在檢查字典中是否存在密鑰。如果該鍵不存在,頁面崩潰並且出現KeyNotFoundException。Dictionary.ContainsKey拋出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。有什麼建議麼?

回答

1

我的猜測會是一個錯字 - 可能是套管?我知道這聽起來微不足道,但我看到這一切的時候...

您也可以嘗試寫它作爲

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

,以避免重複鍵的可能性,做的小的性能問題字典兩次。

+0

我不能相信這一點,這是一個錯字。 ContainsKey使用的是正確的密鑰,然後當試圖訪問該值時,我使用的密鑰丟失了一個字母。我一直認爲這是ContainsKey,因爲那是在錯誤頁面中突出顯示的部分。 – dburgener

+0

會發生在我們身上:) –

+0

這就是爲什麼當你認爲它的行爲奇怪時,查看一個函數的文檔是很重要的。如果你要查找ContainsKey,你會發現它不能拋出一個KeyNotFoundException,它會指向你實際的問題 –

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庫珀提出了一個不同的密鑰,所以檢查錯別字

相關問題