2017-02-04 112 views
1

要拋出一個異常,到目前爲止我使用這種方式?是否有可能將錯誤代碼添加到異常?

throw new ArgumentException("My message"); 

但是,如果一個方法可以拋出一個ArgumentException由於很多原因,我想知道異常的確切原因。

我知道,我可以用這個遠:

throw new ArgumentException("MyParamName", "MyMessage"); 

但這種情況並不能幫助這麼多,如果同樣的參數可以有很多理由拋出ArgumentException的。例如,我有兩個屬性的方法中的參數,一個需要大於0,另一個小於0.我想發送一個錯誤代碼,001當第一個參數不大於0和002當第二個參數不小於0.這樣。但我不知道是否可以在異常中設置錯誤代碼。

我可以用這樣的方式:

throw new ArgumentException("My message " + "(001)"); 

在我可以添加錯誤代碼的消息的結束,但我不得不搜索字符串(001)。但我想知道是否會有更好的選擇。

另一種方式可以創建我自己的異常,但如果我有一個ArgumentException,我認爲創建一個新的異常只有一個屬性的錯誤代碼,幷包含原始異常,它是很少的開銷。

所以我的問題是,什麼是最好的選擇?還有其他解決方案嗎?

謝謝。

回答

2

你可以用錯誤代碼編寫自己的ArgumentException的覆蓋:

public class ArgumentExceptionEx : ArgumentException 
{ 
    public int ErrorCode { get; } 
    public ArgumentExceptionEx(string paramName, int errorCode) 
     : base (paramName)  
    { 
     ErrorCode = errorCode; 
    } 
} 

後,你可以拋出新ArgumentExceptionEx ("MyParamName", 1) 或者你cuold甚至使枚舉你的第二個參數,如果你有錯誤代碼的預定量。

+0

想到了同樣的建議 – Saravanan

相關問題