我不相信有任何方法可以做到这一点,因为 catch 块在不同的范围内。如果不退出 try 块,就无法重新抛出,也无法“调用”最终的 catch 块,因为它仅在异常期间触发。
我会建议与上面的 roman m 相同,然后进行相同的调用。否则你必须做一些非常糟糕的事情。就像下面你永远不应该使用但我包括在内的疯狂代码,因为它做了你想要的事情。
一般来说,我认为您正在做的是通过不推荐的异常来控制正常流程。如果您尝试跟踪超时,您可能应该以另一种方式处理。
请注意,您可以使用 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