【问题标题】:Check all exceptions that a piece of code can throw [duplicate]检查一段代码可以抛出的所有异常[重复]
【发布时间】:2013-12-01 19:41:40
【问题描述】:

真的很简单——有没有办法检查并列出一个方法可能抛出的所有异常?我使用了 try/catch,但我想确保没有遗漏任何内容,并且逐行检查大文件以检查该行是否抛出了运行时可能未捕获的内容,这很痛苦...
哦,是的,我正在使用 C#、.NET 4.5 和 VS2012 PRO。
谢谢好心人。

【问题讨论】:

  • @CodeCaster - 确实如此,谢谢。不知怎的,我没有找到那个。

标签: c# exception visual-studio-2012 exception-handling


【解决方案1】:

在 C# 中,所有抛出的对象都必须派生自 System.Exception。如果你捕捉到System.Exception,你就会捕捉到它们,不管是什么子类型。

【讨论】:

  • 这不是一个真正的解决方案,我可能想为不同的异常做不同的事情。另外,我不想将整个方法主体/调用包装在一次尝试/捕获中,因为我可能会在不同的点得到 2 个相同类型的异常,并且我可能也想基于此执行不同的操作。不过谢谢你的回答。
  • 您可以通过将特定异常的 catch 块放在首位来专门化您的 try/catch 块。您不想做的实际上是每个可能的异常都有一个 catch 块。毕竟,有很多潜在的例外(OutOfMemory、DivisionByZero、ArgumentNull ......),无论如何你都无法以任何明智的方式对它们做出反应。抓住那些你可以做出反应的异常并让所有其他异常通过。让更高层处理它们,直到你的最高层捕获所有并记录它们或其他东西。
  • 这很好,这就是我正在做的 - 问题是我无法处理或我不小心错过的异常,我想将它们添加到方法的文档中以便人们使用库并调用该方法知道会发生什么。这就是为什么我只需要在一段代码中列出未捕获的异常。这真的应该通过某种静态分析或自动分析我在代码中使用的方法/对象的文档来实现......无论如何我都会想象......
  • Java 使用关键字做到了这一点,而 .NET 开发人员没有遵循这条道路是有充分理由的:它没有帮助。我想你可以递归地反思代码,但没有人需要它,所以我认为这不是一个简单的、开箱即用的功能。
猜你喜欢
  • 1970-01-01
  • 2014-02-14
  • 2011-06-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多