2013-08-29 60 views
-2

我們可以將異常附加到事件處理程序嗎?我們可以在事件處理程序中添加異常嗎?

這裏是我的代碼:

if (customer == null) 
{ 
    eventListener.HandleEvent(Severity.Informational, line.GetType().Name, String.Format("Could not find the customer corresponding to the taxId '{0}' Current Employment will not be imported.", new TaxId(line.TaxId).Masked)); 
    return; 
} 
if (incomeType == null) 
{ 
     eventListener.HandleEvent(Severity.Warning, line.GetType().Name, String.Format("The income type of '{0}' in the amount of {1:c} is not a known type.", line.Type, line.Amount)); 
     return; 
} 

可我把嘗試catch塊這些語句?因爲我有很多錯誤消息是由事件處理程序處理的。所以不是寫很多這個事件處理程序,我們可以通過只寫一次來完成它?

+0

你問你是否可以捕獲異常並將其傳遞給'HandleEvent'方法? – JeremiahDotNet

+0

'eventListener'的類型是什麼? – jdphenix

+0

它可能是有幫助的閱讀此:http://msdn.microsoft.com/en-us/library/ms173160.aspx –

回答

1

根據你的評論,它聽起來像你想捕獲一個異常,並將它傳遞給一個方法來處理。

Exception類型的參數添加到您的方法中。

public void MethodName(Exception error, ...) 
{ 
    if (error is NullReferenceException) 
    { 
     //null ref specific code 
    } 
    else if (error is InvalidOperationException) 
    { 
     //invalid operation specific code 
    } 
    else 
    { 
     //other exception handling code 
    } 
} 

您可以捕捉使用try/catch塊異常。即使您將其轉換爲例外,原始的異常類型也會保留。

try 
{ 
    //do something 
} 
catch (Exception ex) 
{ 
    //capture exception and provide to target method as a parameter 
    MethodName(ex); 
} 

您還可以捕獲特定類型的異常,並用不同的方法處理它們。

try 
{ 
    //do something 
} 
catch (InvalidOperationException ioe) 
{ 
    //captures only the InvalidOperationException 
    InvalidOpHandler(ioe); 
} 
catch (NullReferenceException nre) 
{ 
    //captures only the NullReferenceException 
    NullRefHandler(nre); 
} 
catch (Exception otherException) 
{ 
    //captures any exceptions that were not handled in the other two catch blocks 
    AnythingHandler(otherException); 
} 
+0

我有很多方法,我必須檢查一個空例外。假設在processcustomer()方法中,我需要檢查客戶對象是否爲null,並考慮另一個方法processincome(),其中我必須檢查收入是否爲null。兩種方法都顯示不同的錯誤消息我們可以使用處理所有異常的通用catch塊嗎? – user2619542

0

它看起來像你試圖處理異常使用try { ... } catch { ... }塊以外的東西。我不會使用任何其他方式處理C#中的異常 - try,catchfinally是專門爲此任務構建的。

它看起來像你正在寫東西來處理輸入驗證。有一個說法是例外是否是適合的,但如果你是,你應該重構爲這樣的事情:

if (customer == null) 
{ 
    throw new ArgumentNullException("customer", 
    String.Format("Could not find the customer corresponding to the taxId '{0}' Current employment will not be imported.", 
    new TaxId(line.TaxId).Masked) 
); 

然後調用代碼:

try 
{ 
    // code that can throw an exception 
} 
catch (ArgumentNullException ex) 
{ 
    someHandlingCode.HandleEvent(ex); 
    // if you need to rethrow the exception 
    throw; 
} 

長和簡而言之 - 是的,你可以聲明一個方法,它將一個異常作爲參數並根據on進行一些操作。

相關問題