无参数捕获和其他捕获之间的区别

Ind*_*ore 4 c# exception-handling exception

我有一段代码

//Code 1                        Code 2                          Code 3
try                             try                             try
{                               {                               {
    //Exp occur                     //Exp occur                     //Exp occur 
}                               }                               }
catch (Exception e)             catch (Exception)               catch
{                               {                               {
    //Handle exp                    //Handle exp                    //Handle exp
}                               }                               }
Run Code Online (Sandbox Code Playgroud)

所有三个代码
P.S.之间有什么区别.我是新手,C#并且至于Java或者Objective-C担心这个语法会引发错误

Hab*_*bib 8

代码1

它在一个对象中捕获Exception,e以后可以用于异常处理.例如,您可以使用e.Message或记录Message属性或查看堆栈跟踪e.StackTrace

代码2

您正在捕获基类型的所有异常,Exception但由于您没有任何与之相关的对象,因此您只能抛出该异常以使其冒泡或者您可以忽略该异常.如果在那段代码中你有:

catch(InvalidCastException)
Run Code Online (Sandbox Code Playgroud)

然后所有InvalidCastException将在没有异常对象的块中处理

代码3

您正在捕获所有类型的异常,无论其类型如何,这与您的基类类代码2类似 Exception

try-catch - MSDN

尽管可以在不使用参数的情况下使用catch子句来捕获任何类型的异常,但不建议使用此用法.通常,您应该只捕获那些您知道如何从中恢复的异常.

如果在捕获基本异常之前捕获特定异常,它总是更好.就像是.

try
{
}
catch(InvalidCastException ex)
{
}
catch(Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)

尝试 - 捕获 - MSDN

可以在同一个try-catch语句中使用多个特定的catch子句.在这种情况下,catch子句的顺序很重要,因为catch子句是按顺序检查的.在不太具体的例外之前捕获更具体的例外.如果您订购了catch块,编译器会产生错误,以便永远无法访问以后的块.