处理KeyNotFoundException的最佳方法

我正在使用字典为我正在处理的程序执行查找。 我通过字典运行了一堆密钥,我期望有一些密钥没有价值。 我发现它发生的KeyNotFoundException ,并吸收它。 所有其他exception将传播到顶部。 这是处理这个问题的最好方法吗? 或者我应该使用不同的查找? 该字典使用int作为其键,并使用自定义类作为其值。

改用Dictionary.TryGetValue

 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); } 

尝试使用:Dict.ContainsKey

编辑:
性能明智,我认为Dictionary.TryGetValue是更好的一些其他人的build议,但我不喜欢用,当我不必这样在我看来,ContainsKey更具可读性,但需要更多的代码行,如果你需要的价值也。

一个使用TryGetValue行解决scheme

 string value = dictionary.TryGetValue(key, out value) ? value : "No key!"; 

请注意, variables必须是字典在此情况下返回的stringtypes 。 这里你不能使用var来表示variables声明。

下面是一个优雅的,单行的解决scheme(请记住,这使查找两次。请参阅下面的tryGetValue版本,这应该在长时间运行的循环中使用。

 string value = dictionary.ContainsKey(key) ? dictionary[key] : "default"; 

但是我发现自己每次访问字典时都必须这样做。 我宁愿它返回null,所以我可以写:

 string value = dictionary[key] ?? "default";//this doesn't work 

你应该使用Dictionary的'ContainsKey(string key)'方法来检查一个键是否存在。 使用正常程序stream程的例外不被认为是一个好的做法。