我们可以在 Try-Catch 中使用多个 catch 块。但我的问题是:为什么可以使用单个 catch 块来完成多个 catch 块?
假设我想要我的问题的确切原因,我可以通过 Ex.message 得到它
如果我想向用户显示自定义消息,我可以通过在 Ex.Message 上放置 If-Else 循环来显示它。
提前致谢。
我们可以在 Try-Catch 中使用多个 catch 块。但我的问题是:为什么可以使用单个 catch 块来完成多个 catch 块?
假设我想要我的问题的确切原因,我可以通过 Ex.message 得到它
如果我想向用户显示自定义消息,我可以通过在 Ex.Message 上放置 If-Else 循环来显示它。
提前致谢。
相应地处理个别异常。
例如:如果您的程序同时处理数据库和文件。如果SQLException
发生,您必须以数据库方式处理它,例如关闭 dbConnection/reader 等,而如果是文件处理异常,那么您可能会以不同的方式处理它,例如文件关闭、fileNotFound 等。
这是我认为的主要原因。
对于点号 1 和 2:
如果显示错误消息是您的主要想法,那么您可以使用if..else
. 如果您想处理异常,请检查我回答的上述要点。我之所以对文字处理进行拉伸,是因为它与显示简单的错误消息完全不同。
要添加一些引号,我更喜欢处理异常的最佳实践,它说
一组精心设计的错误处理代码块可以使程序更加健壮,并且更不容易崩溃,因为应用程序会处理此类错误。
这仅在所有异常共享相同的基类时才有效,那么您可以这样做。
但是,如果您确实需要特定于异常类型的处理,那么我更喜欢多个 try-catch 块,而不是一个依赖于类型的 if-else ...
您也可以问我们为什么需要 Switch - Case。你可以用 If - Else 来做。
为什么你还需要 Else。您可以使用 If (如果不是第一个条件,并且...)。
这是编写干净易读的代码的问题。
通过使用单个捕获时钟,您可以捕获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