处理 KeyNotFoundException 的最佳方法
我正在使用字典来查找我正在开发的程序。 我在字典中运行了一堆键,并且我希望某些键没有值。 我捕捉到 KeyNotFoundException
就在它发生的地方,并吸收它。 所有其他异常都会传播到顶部。 这是处理这个问题的最佳方法吗? 或者我应该使用不同的查找? 该字典使用 int 作为其键,并使用自定义类作为其值。
I am using a dictionary to perform lookups for a program I am working on. I run a bunch of keys through the dictionary, and I expect some keys to not have a value. I catch the KeyNotFoundException
right where it occurs, and absorb it. All other exceptions will propagate to the top. Is this the best way to handle this? Or should I use a different lookup? The dictionary uses an int as its key, and a custom class as its value.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
使用
Dictionary.TryGetValue
代替:Use
Dictionary.TryGetValue
instead:尝试使用:
Dict.ContainsKey
编辑:
性能方面,我认为
Dictionary.TryGetValue
比其他人建议的更好,但我不喜欢在不需要时使用 Out,所以在我看来 ContainsKey 更具可读性,但需要更多代码行如果您也需要该值。Try using:
Dict.ContainsKey
Edit:
Performance wise i think
Dictionary.TryGetValue
is better as some other suggested but i don't like to use Out when i don't have to so in my opinion ContainsKey is more readable but requires more lines of code if you need the value also.使用
TryGetValue
的一行解决方案请注意,value 变量必须是字典在本例中返回的类型 string。 这里不能使用 var 来声明变量。
如果您使用的是 C# 7,在这种情况下,您可以包含 var 并内联定义它:
这也是一个很好的扩展方法,它将完全实现您想要实现的功能 dict.GetOrDefault("Key")或 dict.GetOrDefault("键", "无值")
One line solution using
TryGetValue
Be aware that value variable must be of type which dictionary returns in this case string. Here you can not use var for variable declaration.
If you are using C# 7, in which case you CAN include the var and define it inline:
Here is also nice extension method which will do exactly what you want to achieve dict.GetOrDefault("Key") or dict.GetOrDefault("Key", "No value")
这是一个单行解决方案(请记住,这会进行两次查找。请参阅下面的 tryGetValue 版本,该版本应该在长时间运行的循环中使用。)
但是我发现自己每次访问字典时都必须执行此操作。 我希望它返回 null,这样我就可以写:
Here is a one line solution (Keep in mind this makes the lookup twice. See below for the tryGetValue version of this which should be used in long-running loops.)
Yet I find myself having to do this everytime I access a dictionary. I would prefer it return null so I can just write:
我知道这是一个旧线程,但如果它有帮助,之前的答案很棒,但是可以解决复杂性的评论和乱扔代码的担忧(对我来说也都有效)。
我使用自定义扩展方法以更优雅的形式包装上述答案的复杂性,以便它不会散布在整个代码中,然后它可以为空合并运算符提供强大的支持。 。 。 同时还最大化性能(通过上面的答案)。
然后您只需导入命名空间 System.Collections.Generic.CustomExtensions 即可使用它
I know this is an old thread but in case it's helpful the prior answers are great, but the comments of complexity and concerns of littering the code (all valid for me also) can be addressed.
I use a custom extension method to wrap up the complexity of the above answers in a more elegant form so that it's not littered throughout the code, and it then enables great support for null coalesce operator . . . while also maximizing performance (via above answers).
Then you can use it simply by importing the namespace System.Collections.Generic.CustomExtensions
您应该使用字典的“ContainsKey(string key)”方法来检查键是否存在。
对正常程序流程使用异常不被认为是一个好的做法。
you should use the 'ContainsKey(string key)' method of the Dictionary to check if a key exists.
using exceptions for normal program flow is not considered a good practice.