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