我使用下面的代码:什么进入()捕获?
catch (Exception ex) {
processException(ex);
return View("CreateEdit", vm);
}
是否有必要声明异常“异常前”。我想知道是否有一个catch块 有任何在后面的括号中,与异常派生的东西 无关?
我使用下面的代码:什么进入()捕获?
catch (Exception ex) {
processException(ex);
return View("CreateEdit", vm);
}
是否有必要声明异常“异常前”。我想知道是否有一个catch块 有任何在后面的括号中,与异常派生的东西 无关?
在catch块中,你将不得不提供你想要捕获的异常类型。所有这些类型都必须从类System.Exception
最好不要赶Exception
类型的异常直接而捕获特定的异常的。处理System.Exception(如果存在)的catch块最后指定为最佳值。
http://msdn.microsoft.com/en-us/library/ms229007.aspx
http://msdn.microsoft.com/en-us/library/system.exception.aspx
否;它必须始终是一个类型为Exception
的参数或从其派生的东西。
该部分指定在catch
块中捕获哪种类型的异常及其派生类。例如,考虑:
try
{
//stuff...
}
catch (DivideByZeroException ex)
{
//do stuff with divide by zero...
}
catch (MyCustomException ex)
{
//do stuff with my custom exception...
}
catch (IOException ex)
{
//do stuff with IO Exception...
}
catch (Exception ex)
{
//handle all other exceptions
}
的catch
条款的顺序是至关重要的,如果有多个。他们必须始终从大多数派生到最少;如果我将最后一个块Exception
置于顶部,它将捕获所有异常,而其他更多派生块将不会捕获任何内容。
也可以忽略最通用的Exception
,以便让其他类型的异常将堆栈升级到新的级别。
在C#中,当您捕捉某种特定类型的东西时,它必须是Exception
或从Exception
派生的类型。其他.NET语言(例如C++/CLI)支持抛出非Exception
类型,并且捕获这些类型的唯一方法是使用“空捕获”,即catch { ... }
- 但这仅在非常罕见的情况下才有用与其他图书馆互操作)。
不,它不是强制性的。在catch块中,声明了一个System.Exception类的对象,该类包含引发的异常的详细信息。
你可以声明你的想法,因为它只是约定使用Exception Ex
。括号中的类是捕获的异常的类型。如果您不使用括号,那么您使用throw
声明抛出异常。
例如,这些都是有效的:
catch (Exception ex) { }
catch (Exception e) { }
catch (Exception objEx) { }
如下问题的答案表明,好字捕捉异常的类型(类)是强制性的。但是,声明该类型的*变量*是可选的。如果你想使用'catch'块中的异常对象,你只需要这样做。否则,你可以简单地写'catch(Exception)'或甚至更好,处理一个特定的更多派生异常,'catch(FileNotFoundException)'。 – 2011-12-20 04:41:10