我不相信有什麼辦法可以做到這一點,因爲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