2011-04-20 242 views
3

如果我在一個大的try catch中有一些代碼,最終會捕獲一個OracleException和一個通用的Exception,那麼我不能在try catch中拋出任何自定義異常,因爲它被抓到一般Exception在try catch中拋出一個自定義的異常

在這種情況下我該怎麼做?

感謝

try 
{ 
    // some code 
    if(a==b) 
    { 
     throw new MyCustomException(ex); 
    } 
} 
catch(OracleException ex) 
{ 
    ... 
} 
catch(Exception ex) 
{ 
    ... 
} 
+1

當我看到別人的答案,我認爲問題並不完全清楚......你能不能改一下它一點點,或添加一些代碼,以顯示你想什麼去做? – Philippe 2011-04-20 08:14:35

+0

被接受的答案會起作用,但是你應該儘量去除「catch(Exception ex)」。這幾乎總是一個壞主意。 – Joe 2011-04-20 09:03:15

回答

5

你的意思是你想拋出一個自定義異常由追趕調用Exception塊捕獲?

如果是這樣的話,那麼試試這個:

try 
{ 
    throw new MyCustomException(); 
} 
catch (OracleException ex) 
{ 
    // Handle me... 
} 
catch (MyCustomException) 
{ 
    // Important: NOT `throw ex` (to preserve the stach trace) 
    throw; 
} 
catch (Exception ex) 
{ 
    // Handle me... 
} 

MyCustomException類型的任何異常將被第二catch被抓(而不是由第三catch),然後重新拋出。

請注意,做catch (Exception)通常是不好的做法 - 這是一個很好的例子。我肯定地建議,而不是做上述,你只需重構,這樣你就不再捕獲Exception,這將是一個更好的解決方案。

0

你不能簡單地用您的自定義異常增加catch條款?

try 
{ 
    //Lots of code 
} 
catch (OracleException) 
{ 
} 
catch (MyCustomException) 
{ 
} 
catch (Exception) 
{ 
} 
+0

你不應該用拋出的相同方法捕獲異常嗎? – ricki 2011-04-20 08:15:37

0

試試這個

catch(OracleException ex) 
    { 
    throw new MyCustomException(
        "MyCustomEX error: Unable to ......", ex); 
    } 
1

檢查:

try 
{ 
     ...  
} 
catch() 
{ 
     throw new Execption("I'M A NEW EXCEPTION") 
} 
finally 
{ 
     ... 
}