【问题标题】:Is is possible for there to be an exception in a catch block? [duplicate]catch 块中是否可能存在异常? [复制]
【发布时间】:2017-12-18 18:53:33
【问题描述】:

catch 块中是否有可能发生异常?如果是,那么在这种情况下我该如何处理?

【问题讨论】:

  • 是的。如果需要,您可以将 try/catch 放在 catch 块中,但如果有的话,这种情况应该很少见。

标签: c# exception-handling try-catch


【解决方案1】:

可以在catch 块内引发异常,但这种情况很少见,或者至少应该如此。显然,这取决于您在 catch 块中放入的内容。

您最好的保护措施是避免在 catch 语句中使用大量代码,并且只包含不太可能引发另一个异常的“安全”代码合理地

请记住,由于异常,您的代码的“正常”流程中不会发生任何事情,因此在大多数情况下,您的 catch 中不会有任何内容,除了日志记录或其他次要内容。如果您的 catch 中有一大段应用程序代码,它可能不应该存在。

如果您必须在您的 catch 中做某事,并且有一个可理解的已知原因可能引发另一个异常,您可以在您的 catch 中添加另一个 try/catch。它确实会发生 - 这并非闻所未闻 - 但并不常见。

如果您必须在 catch 中调用其他方法,最好知道它是否可能引发异常。熟悉您的日志记录并确保它不会引发另一个异常并没有什么坏处。或者,如果它是某种 .NET Framework 方法,文档通常会告诉您它抛出了哪些异常以及原因。

作为一个随机示例,查看Dictionary<TKey, TValue>Remove 方法的文档:

例外情况

Exception               Condition   

ArgumentNullException   key is null 

然后它会告诉您,如果您想知道,如果您尝试删除一个不存在的密钥会发生什么。

如果 Dictionary 不包含具有指定键的元素,则 Dictionary 保持不变。不抛出异常。

熟悉在线文档中的内容会非常有帮助,包括方法抛出的异常等详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多