2016-07-23 11 views
1

ich eine benutzerdefinierte Ausnahmeklasse wie das erstellte untererhält Eigenschaft 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;} 
    } 
} 

Ich bin in der Lage, die Eigenschaft failedtext zu setzen, wenn die Ausnahme zu werfen, aber nicht in der Lage, die failedtext in meinem Haupt-Code zu erhalten; Die Ausnahme kommt als eine innere Ausnahme, ich kann die Eigenschaft sehen, kann sie aber nicht bekommen. Gibt es eine Möglichkeit, dies zu tun?

Ich möchte den Wert von failedtext erhalten, um den Fehler zu behandeln. Vielen Dank.

+1

Wie werfen Sie diese Ausnahme und wie fangen Sie es? – DavidG

Antwort

2

Wenn Ihr Haupt Code sieht wie folgt aus:

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

Das Problem ist, dass Innerexception-Eigenschaft als Ausnahme eingegeben wird. Sie können sicher das Objekt Ihrer benutzerdefinierten Typ umwandeln, indem Sie den catch-Block Wechsel zu:

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

Beachten Sie auch die Data-Eigenschaft der Ausnahme anstelle dieser benutzerdefinierten Typ mit:

//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"]; 
    } 
} 

Außerdem ist Ihre Eigenschaft rekursiv definiert. Ändern Sie es zu diesem:

public string failedtext 
    { 
    get; 
    set; 
    } 
+0

In Bezug auf den letzten Kommentar über die rekursive Eigenschaft, denke ich, OP zeigt uns nur Text-Code, wie es nicht einmal kompilieren würde. – DavidG

Verwandte Themen