5

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

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

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

提前致谢。

4

4 回答 4

6

相应地处理个别异常。

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

这是我认为的主要原因。

对于点号 1 和 2:

如果显示错误消息是您的主要想法,那么您可以使用if..else. 如果您想处理异常,请检查我回答的上述要点。我之所以对文字处理进行拉伸,是因为它与显示简单的错误消息完全不同。

要添加一些引号,我更喜欢处理异常的最佳实践,它说

一组精心设计的错误处理代码块可以使程序更加健壮,并且更不容易崩溃,因为应用程序会处理此类错误。

于 2013-09-11T05:57:15.903 回答
1

这仅在所有异常共享相同的基类时才有效,那么您可以这样做。

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

于 2013-09-11T05:55:53.110 回答
0

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

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

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

于 2013-09-11T05:58:03.680 回答
0

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

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

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

程序应该只捕获预期的异常类型(一种或多种),而不处理意外的类型。为此,我们需要有多个 catch 块的可能性。也可以看看:

为什么 FxCop 会针对 catch(Exception) 发出警告?

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

于 2013-09-11T06:06:46.877 回答