这有点抽象,但是有没有可能抛出一个异常并让它进入多个catch块呢?例如,如果它与后面跟着非特定异常的特定异常匹配。
catch(Arithmetic exception)
{
//do stuff
}
catch(Exception exception)
{
//do stuff
}
发布于 2010-10-28 00:33:15
拥有多个不同类型的catch块是完全可以接受的。但是,行为是第一个候选块处理异常。
它不会同时输入两个catch块。匹配异常类型的第一个catch块将处理该特定异常,而不处理其他异常,即使它在处理程序中被重新抛出。一旦异常进入catch块,任何后续的异常都将被跳过。
为了在两个块中都捕获异常,您需要像这样嵌套块:
try
{
try
{
// Do something that throws ArithmeticException
}
catch(ArithmeticException arithException)
{
// This handles the thrown exception....
throw; // Rethrow so the outer handler sees it too
}
}
catch (Exception e)
{
// This gets hit as well, now, since the "inner" block rethrew the exception
}
或者,您可以根据特定类型的异常在通用异常处理程序中进行筛选。
发布于 2010-10-28 00:34:16
不是的。对于单个异常,不可能同时执行两个catch块中的代码。
我可能会将通用异常块中的代码重构为可以从其中任何一个调用的代码。
try
{
// blah blah blah
{
catch(Arithmetic ae)
{
HandleArithmeticException( ae );
HandleGenericException( ae );
}
catch(Exception e)
{
HandleGenericException( e );
}
发布于 2010-10-28 00:39:11
就像其他人所说的,异常将被最具体的catch块捕获。
这给我带来了一个关于异常处理的挫折。我希望你能做像这样的事情
catch (ArgumentNullExcpetion, ArugmentOutOfRangeException ex)
{
}
而不是必须做
catch (ArgumentNullExcpetion e)
{
}
catch (ArugmentOutOfRangeException outOfRange)
{
}
我理解你可能会对不同的异常做不同的事情的理由,但有时我想把它们结合起来。
https://stackoverflow.com/questions/4035477
复制相似问题