我正在使用字典爲我正在處理的程序執行查找。我通過字典運行了一堆密鑰,我期望有些密鑰沒有價值。我發現它發生在KeyNotFoundException
,並吸收它。所有其他異常將傳播到頂端。這是處理這個問題的最好方法嗎?或者我應該使用不同的查找?該字典使用int作爲其鍵,並使用自定義類作爲其值。處理KeyNotFoundException的最佳方法
50
A
回答
88
Dictionary<int,string> dictionary = new Dictionary<int,string>();
int key = 0;
dictionary[key] = "Yes";
string value;
if (dictionary.TryGetValue(key, out value))
{
Console.WriteLine("Fetched value: {0}", value);
}
else
{
Console.WriteLine("No such key: {0}", key);
}
31
嘗試使用: Dict.ContainsKey
編輯:
明智的性能我覺得Dictionary.TryGetValue
是更好,因爲一些其他的建議,但我不喜歡用的時候我沒有那麼在我看來, ContainsKey更具可讀性,但如果您還需要該值,則需要更多的代碼行。
4
,你應該使用「的containsKey(字符串鍵)」字典的方法來檢查是否有鍵存在。 使用正常程序流程的異常不被認爲是一種好的做法。
11
這裏是一個優雅,一個在線解決方案(請記住,這使得查找的兩倍。見下文對這個tryGetValue版本應該在長時間運行的循環使用。)
string value = dictionary.ContainsKey(key) ? dictionary[key] : "default";
然而,我每次訪問字典時都發現自己不得不這樣做。我寧願它返回null這樣我就可以寫:
string value = dictionary[key] ?? "default";//this doesn't work
14
一個使用TryGetValue
string value = dictionary.TryGetValue(key, out value) ? value : "No key!";
注意值變量必須是字典,則返回在這種情況下字符串類型的在線解決方案。在這裏,您不能使用var進行變量聲明。
相關問題
- 1. cocos2dx中的最佳處理方法
- 2. 處理列表的最佳方法
- 3. 處理ZeroDivisonError的最佳方法?
- 4. 處理SQL參數的最佳方法?
- 5. 處理JPA合併的最佳方法?
- 6. 測試FileNotFound處理的最佳方法
- 7. 處理CascadingDropDown選擇的最佳方法
- 8. 處理視圖的最佳方法
- 9. 處理JSON超時的最佳方法
- 10. 處理bibtex文件的最佳方法
- 11. 處理rabbitmq消息處理中的時鐘的最佳方法
- 12. 最佳方式處理
- 13. KeyNotFoundException由用戶未處理
- 14. 在類內處理幾個方法的最佳方法?
- 15. ASP.net:處理清理頁面的最佳方法是什麼?
- 16. NullPointerException和處理它的最佳方式
- 17. 從C#處理.dbf的最佳方式
- 18. 處理樹數組的最佳方式
- 19. 處理「重複」的最佳方式
- 20. 處理資源的最佳方式
- 21. 處理WCF超時的最佳方式
- 22. 錯誤處理的最佳方式
- 23. Android中處理XML的最佳方式
- 24. 處理多個NSTableView的最佳方式
- 25. 處理Braintree超時的最佳方式
- 26. 處理重複方法調用的最佳做法是什麼?
- 27. 異步/等待方法和異常處理的最佳做法
- 28. 處理無法實例化對象的最佳方法?
- 29. 使用HtmlEntity.DeEntitize()方法的KeyNotFoundException
- 30. 最好的處理方法
爲什麼會得到一個downvote?請解釋,以便我可以改進答案。 – Peter 2014-09-08 06:18:48
你能解釋一下爲什麼你不喜歡用`out`,除非你必須? – 2015-08-26 13:51:05
@wilbishardis它只是一個習慣,在我看來,我認爲它很難錯過,當你有一個=符號時,方法參數可以修改得更清晰。現在這只是我的意見,並不意味着每個人都有同感,在某些情況下,它的最佳選擇`int.TryParse`就是一個例子。 – Peter 2015-10-05 06:16:39