2016-08-18 43 views
-1

我開發在VS2015 一個Windows應用程序,我的查詢是關於處理系統定義異常兩種可能的方法: - 使用嘗試過的位置可能塊和處理它 - 定義一個異常類並寫下所有可能的異常(我只關注系統定義的異常,例如File Not Found,Null Reference),並在其他自動處理異常的類中繼承該類。 任何人都可以請指教我哪種方法更好,如果第二種方法更好,如何實現和使用它。我的類已經從Form繼承。那麼我需要一個界面嗎?如果是的話我可以在哪裏實施這些方法? 任何幫助表示讚賞! 在此先感謝。可能有一類專門爲異常處理的C#

+2

該包裝將是一個非常糟糕的主意。一般來說,例外需要特定的處理。所以如果你發現了一個'NullReferenceException',你會在處理程序中做什麼?你不知道如何恢復。唯一可能有用的是一個非常通用的錯誤信息(即「發生錯誤,抱歉」)或記錄。 – DavidG

+0

使用第三個選項:在最低級別添加try-catch,並在那裏處理您的一般例外。 – Maarten

回答

1

方法2是可能的。如果你總是期待同樣的例外,我會推薦它。

如果被調用的方法可以拋出非常特定的異常,那麼可能會更好地處理它們靠近拋出的位置。

可以定義一個包裝方法以捕獲異常這樣的:

public bool TryExecuteServiceAction(Action a) { 

    if (a == null) { 
     throw new ArgumentNullException("a"); 
    } 

    try { 
     a(); 
     return true; 
    } 
    catch (SecurityAccessDeniedException sade) { 
     Logger.Error(sade); 
     return false; 
    } 
} 

通過返回ResultObject包含錯誤碼,消息等而不是返回bool將此模式擴展。

使用這樣

DoSomethingDto serviceResult = null; 
var success = TryExecuteServiceAction(() => serviceResult = _service.DoSomething(command)); 
if (success) { 
    // we know that the service call was successful and the DTO has data 
    // work with DTO ... 
} 
else { 
    // e.g. show generic error message to user 
}