【发布时间】:2017-12-18 18:53:33
【问题描述】:
catch 块中是否有可能发生异常?如果是,那么在这种情况下我该如何处理?
【问题讨论】:
-
是的。如果需要,您可以将 try/catch 放在 catch 块中,但如果有的话,这种情况应该很少见。
标签: c# exception-handling try-catch
catch 块中是否有可能发生异常?如果是,那么在这种情况下我该如何处理?
【问题讨论】:
标签: c# exception-handling try-catch
可以在catch 块内引发异常,但这种情况很少见,或者至少应该如此。显然,这取决于您在 catch 块中放入的内容。
您最好的保护措施是避免在 catch 语句中使用大量代码,并且只包含不太可能引发另一个异常的“安全”代码合理地。
请记住,由于异常,您的代码的“正常”流程中不会发生任何事情,因此在大多数情况下,您的 catch 中不会有任何内容,除了日志记录或其他次要内容。如果您的 catch 中有一大段应用程序代码,它可能不应该存在。
如果您必须在您的 catch 中做某事,并且有一个可理解的已知原因可能引发另一个异常,您可以在您的 catch 中添加另一个 try/catch。它确实会发生 - 这并非闻所未闻 - 但并不常见。
如果您必须在 catch 中调用其他方法,最好知道它是否可能引发异常。熟悉您的日志记录并确保它不会引发另一个异常并没有什么坏处。或者,如果它是某种 .NET Framework 方法,文档通常会告诉您它抛出了哪些异常以及原因。
作为一个随机示例,查看Dictionary<TKey, TValue> 的Remove 方法的文档:
例外情况
Exception Condition
ArgumentNullException key is null
然后它会告诉您,如果您想知道,如果您尝试删除一个不存在的密钥会发生什么。
如果 Dictionary 不包含具有指定键的元素,则 Dictionary 保持不变。不抛出异常。
熟悉在线文档中的内容会非常有帮助,包括方法抛出的异常等详细信息。
【讨论】: