2012-05-23 18 views
0

如何優雅地拋出異常?如何優雅地拋出新的異常

public void Test() 
{ 
if (error != 0) { 
    string msg = "Error"; 
    throw new Exception(msg); 
} 

    // Other function 
    ... 
} 

我也改變throw new Exception(msg);與記錄

public void Test() 
{ 
if (error != 0) { 
    string msg = "Error"; 
    //throw new Exception(msg); 
    logger.Error(msg); 
} 

    // Other function 
    ... 
} 

我應該使用exit函數退出函數時錯誤衝擊嗎?

Thnak you。

回答

2

您希望在拋出異常之前進行登錄。

您還想拋出一個繼承自System.Exception的異常類型,以便消費者可以捕獲特定類型。

拋出異常將退出該函數(實際上如果你有一個會先處理finally塊),所以你只需要拋出。另外,如果你在錯誤情況下捕捉到不同的異常,你可以登錄然後簡單地調用throw;拋出原始異常而不是垃圾堆棧。如果你想扔在這種情況下,你自己 異常類型,您可以包括原始異常作爲內部異常

catch (Exception e) 
{ 
    // log exception details 
    throw; 
} 

或...

catch (Exception e) 
{ 
    // log exception details 
    throw new MyCustomException("message", e); // inherits from Exception 
} 

最後一個的好處(如果適用)是消費者可以捕捉MyCustomException,如果它對特殊處理很有意思。

+0

我記得讀到它拋出異常也是一個昂貴的操作。雖然我無法告訴你我在哪裏或什麼時候閱讀。 –

1

如果您願意,例外情況的意圖是'不嚴格'。不要打電話給Exit,除非它真的是致命的,而且你不希望程序繼續。客戶端代碼應該捕獲異常,並評估是否退出。

此外,如果您想記錄該錯誤,請在throw之前執行。

ps。不要在關鍵字後命名你的功能....

+0

是的,這只是一個例子。我將重命名該函數。 – Alvin