是否有一个处理异常的经验法则wrt是否应该在引发异常的代码或调用者的相同方法中处理它们?
关于这一点,决定何时使用“抛出新的”或catch块的经验法则/一般惯例是什么?
谢谢
发布于 2012-02-09 09:06:12
Catch意味着你可以处理异常。
当您能够处理这种情况并做一些有用的事情时,您应该捕获异常。否则,您应该让它在调用堆栈中冒泡,也许您上面的某个人可以处理它。一些应用程序有未处理的异常处理程序来在最外层处理它,但一般来说,除非你知道你有一些有用的方法来处理它,否则就让它去吧。
抛出新的意味着你正在创造一个你上面的人可能想要捕捉的错误条件。请记住,调用者可能想要处理/捕获您的错误,所以不要抛出新的" exception“或"ApplicationException”-抛出从exception继承的特定异常类型,以便用户知道他们正在处理什么。
最后但并非最不重要的一点是,确保异常是例外的。除非是异常错误情况,否则不要抛出异常。例如,检查是否存在某些东西的代码不应该抛出和捕获-它会导致调试器崩溃,而且如果频繁调用,它的开销会很大。在我们的团队中,如果没有遇到错误情况,我们总是寻找运行干净的代码。
这里有一个相关的帖子:Trying to understand exceptions in C#
发布于 2012-02-09 08:55:44
处理应该在可以处理异常的最低级别上完成。例如,如果一个低级算术函数给出了一个被零除的异常,你也许可以继续。如果发生文件I/O错误,可能应该在应用程序流中非常高的位置处理它,这取决于具体情况。
在你想抛出异常的地方,应该使用抛出新的,所以在异常发生的位置。
应该在可以处理异常的地方添加Catch块,如上所述,它取决于您想要捕获它们的位置,最好是越快越好,但高度要足够高,以便能够处理它们。
https://stackoverflow.com/questions/9203938
复制相似问题