2016-07-23 21 views
1

我創建了一個自定義異常類象下面得到的InnerException C#

public class FailedException : Exception 
{ 
    private string failedtext; 

    public FailedException(string message) : base(message) 
    { 
    } 

    public FailedException(string message) : base(message, innerException) 
    { 
    } 

    public string failedtext 
    { 
    get {return failedtext;} 
    set {failedtext = value;} 
    } 
} 

我可以拋出異常時,設置該屬性failedtext,但無法得到我的主要代碼failedtext的一個屬性;這個例外是作爲一種內部錯誤,我可以看到財產,但無法得到它。有沒有辦法做到這一點?

我想獲取失敗文本的值來處理錯誤。謝謝。

+1

你是如何拋出這個異常,你如何捕捉它? – DavidG

回答

2

如果你的主要代碼如下所示:

try 
{ 
    ThisWillThrow() 
} 
catch(Exception ex) 
{ 
    ex.InnerException.failedtext; //compile error on this line 
} 

的問題是,InnerException屬性的類型爲異常。您可以安全地通過改變catch塊對象投射到您的自定義類型:

catch(Exception ex) 
{ 
    FailedException fex = ex.InnerException as FailedException; 
    if (fex != null) 
    { 
    string text = fex.failedtext; 
    } 
} 

還要考慮使用異常,而不是這種自定義類型的數據屬性:

//thrower's code 
Exception x = new Exception("my message"); 
x.Data["failedtext"] = "my failed text"; 

//catcher's code: 
catch(Exception ex) 
{ 
    if (ex.Data.Contains("failedtext") && ex.Data["failedtext"] is string) 
    { 
    string text = ex.Data["failedtext"]; 
    } 
} 

此外,您的財產是遞歸定義。更改爲:

public string failedtext 
    { 
    get; 
    set; 
    } 
+0

關於遞歸屬性的最新評論,我認爲OP只是向我們顯示文本代碼,因爲它甚至不會編譯。 – DavidG