为什么要使用多个catch块?

时间:2013-09-11 05:50:46

标签: try-catch

我们可以在Try-Catch中使用多个catch块。 但我的问题是:为什么在使用单个catch块时可以使用多个catch块?

  1. 假设我想要解决我的问题的确切原因,我可以通过Ex.message获得

  2. 如果我想向用户显示自定义消息,我可以通过在Ex.Message上放置If-Else循环来显示它。

  3. 提前致谢。

4 个答案:

答案 0 :(得分:5)

相应地处理个别异常。

例如: 如果您的程序处理数据库和文件。如果发生 SQLException ,则必须处理数据库方式,如关闭dbConnection / reader等,而如果文件处理异常则可以处理它与文件关闭,fileNotFound等不同。

这是我观点的主要原因。

对于第1和第2点:

如果显示错误消息是您的主要想法,那么您可以使用if..else。如果如果你想处理异常,请检查我的答案的上述点。我之所以延伸处理这个词,是因为它与显示简单的错误消息完全不同。

要添加一些引用,我更喜欢Best Practices for Handling Exceptions,而

  

一组精心设计的错误处理代码块可以创建一个程序   由于应用程序处理,更强大,更不容易崩溃   这样的错误。

答案 1 :(得分:1)

仅当所有异常共享相同的基类时才有效,然后您可以这样做。

但是如果你确实需要异常类型特定的处理,那么我更喜欢多个try-catch块而不是类型依赖if-else ...

答案 2 :(得分:0)

你也可以问我们为什么需要Switch-Case。你可以用If - Else。

来做

为什么你需要Else呢?您可以使用If(如果不是第一个条件,并且......)。

这是编写干净且可读的代码的问题。

答案 3 :(得分:0)

通过使用单个捕获时钟,您可以捕获Exception类型 - Microsoft编程指南强烈建议您不要这样做。 FxCop的规则DoNotCatchGeneralExceptionTypes被视为CriticalError

捕获常规异常类型可以隐藏库用户的运行时问题,并且可能使调试复杂化。

http://code.praqma.net/docs/fxcop/Rules/Design/DoNotCatchGeneralExceptionTypes.html

该程序应该只捕获预期的异常类型(一个或多个),使未处理的意外类型。要做到这一点,我们需要有多个catch块。另见:

为什么FxCop会警告catch(异常)?

http://blogs.msdn.com/b/codeanalysis/archive/2006/06/14/631923.aspx