我不相信有什么办法可以做到这一点,因为catch块在不同的范围。在没有退出try块的情况下无法重新抛出,也无法“调用”最终catch块,因为它只在异常期间被触发。
我会建议一样的罗马米以上,只是作出相同的呼叫。否则,你必须做一些非常糟糕的事情。像下面的疯狂的代码,你永远不应该使用,但我包括,因为它做了像你想要的东西。
一般来说,我认为你所做的是通过异常来控制正常流量,这是不推荐的。如果你想追踪超时,你可能应该以另一种方式处理。
请注意,您可以像下面的代码一样使用goto语句的错误,但我将其包含在内,因此没有人可以忘记这是一个坏主意。 =)
void Main()
{
Madness(new NotImplementedException("1")); //our 'special' case we handle
Madness(new NotImplementedException("2")); //our 'special' case we don't handle
Madness(new Exception("2")); //some other error
}
void Madness(Exception e){
Exception myGlobalError;
try
{
throw e;
}
catch (NotImplementedException ex)
{
if (ex.Message.Equals("1"))
{
Console.WriteLine("handle special error");
}
else
{
myGlobalError = ex;
Console.WriteLine("going to our crazy handler");
goto badidea;
}
}
catch (Exception ex)
{
myGlobalError = ex;
Console.WriteLine("going to our crazy handler");
goto badidea;
}
return;
badidea:
try{
throw myGlobalError;
}
catch (Exception ex)
{
Console.WriteLine("this is crazy!");
}
}
// Define other methods and classes here
为什么不只'debugLogGeneralException(ex);代替你的评论? – 2013-03-17 06:37:52
@romanm:正如我所说的,它只是一个伪代码,在我的实例中这不是一个真正的函数。 – c00000fd 2013-03-17 06:38:41
我要说的是你应该把你的“异常处理程序”逻辑代替你的评论,而不是“去”那里 – 2013-03-17 06:43:11