我们可以在Try-Catch中使用多个catch块。 但我的问题是:为什么在使用单个catch块时可以使用多个catch块?
假设我想要解决我的问题的确切原因,我可以通过Ex.message获得
如果我想向用户显示自定义消息,我可以通过在Ex.Message上放置If-Else循环来显示它。
提前致谢。
答案 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