捕获的 () 中的内容
本文关键字: | 更新日期: 2023-09-27 18:18:33
我使用以下代码:
catch (Exception ex) {
processException(ex);
return View("CreateEdit", vm);
}
是否有必要声明异常"异常ex"。 我想知道做一个捕获块后面的括号中有任何与某物无关的内容派生自异常?
在 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) { }