抛出新的vs try / catch

时间:2012-02-09 00:47:21

标签: c# .net exception exception-handling

是否有处理异常的经验法则是否应该在异常提升代码或调用者的相同方法中处理它们?

与此相关,决定何时使用“抛出新”或抓住障碍的经验法则是什么?

由于

2 个答案:

答案 0 :(得分:3)

Catch意味着您可以处理异常。

当你能够处理这个条件并做一些有用的事情时,你应该捕获异常。否则你应该让它冒泡调用堆栈,也许你上面的人可以处理它。有些应用程序有未处理的异常处理程序来处理最外层,但一般情况下,除非你知道有一些有用的方法来处理它,否则就让它去吧。

抛出新意味着您正在创建一个错误条件,您可能想要抓住您以上的人。请记住,调用者可能希望处理/捕获您的错误,因此不要抛出新的“Exception”或“ApplicationException” - 抛出一个从异常继承的特定异常类型,以便用户知道他们正在处理什么。

最后但同样重要的是,确保异常是例外。除非是特殊的错误情况,否则不要扔掉。例如,检查是否存在某些内容的代码不应该抛出并捕获 - 它会导致调试器中断,如果频繁调用它会很昂贵。在我们的团队中,如果没有遇到错误情况,我们总是寻找运行干净的代码。

这是一篇相关的帖子: Trying to understand exceptions in C#

答案 1 :(得分:2)

应该在可以处理异常的最低级别上进行处理。例如。如果低级算术函数给出除零异常,则可以继续。如果发生文件I / O错误,可能应该在应用程序流程中处理得非常高,这取决于。

抛出new应该在你想要抛出异常的地方使用,所以在异常发生的位置。

应该在可以处理异常的情况下添加Catch块,并且如上所述,它取决于您想要捕获它们的位置,最好是尽快,但要足够高以便能够处理它们。