2016-04-03 14 views
1

Ich habe einige Funktionen, die Ausnahmen auslösen. Ich möchte, dass der Code-Block, der sie abfängt, auch eine Ausnahme auslöst, basierend auf der Ausnahme, dass throw, aber mit mehr Parametern wie ID und Note. wie kann ich das machen?Vererbung Ausnahme bei Existenz Ausnahme

Wenn jemand mir sogar Richtung geben kann, wird es gut sein!

Dank (sorry für mein Englisch ...)

Beispiel für das, was ich will (ich weiß, ist nicht gültige Code ...)

catch (Exception e) 
{ 
    LogException l=e; 
    l.Note = "note..."; 
    l.ID = 12; 
    throw l; 
} 
+0

Erstellen Sie eine "State" -Klasse, die alle Parameter enthält. Übergeben Sie die Klasse dann an den Ausnahmebehandler. Die Variable 'e' kann eine Klasse enthalten. – jdweng

+0

Warum werfen Sie nicht einfach eine 'LogException' in die erste Instanz? –

+0

@DarrenYoung Ist nicht mein Code, der immer die Ausnahme auslöst, deshalb habe ich keine vollständige Kontrolle über den Ausnahme-Typ –

Antwort

1

Versuchen Sie es.

try 
{ 
    //....kaboom 
} 
catch (Exception ex) 
{ 
    var newEX= new Exception("custom message", ex); 
    newEX.Data.Add("any key", "any obj"); 
    throw newEX; 
} 
+1

Dies ist die bessere Antwort, abgesehen davon, dass Sie Ihren eigenen Ausnahme-Typ erstellen sollten, anstatt Exception zu werfen . Und vielleicht möchten Sie Ihren eigenen Top-Level-Handler schreiben, der rekursiv alle inneren Exceptions durchläuft und eine hübsche Liste aller zu protokollierenden Nachrichten und Stack-Traces kompiliert. Sie sollten es nicht LogException nennen, der Name der Ausnahme sollte etwas über das Problem sagen, nicht darüber, was Sie damit machen wollen, wenn Sie es abfangen. –

2

Sie müßten Ihre eigene Ausnahme definieren (geerbt von Exception), die diese zusätzlichen Eigenschaften hatten. Hier finden Sie das Grundformat für eine benutzerdefinierte Ausnahme: https://msdn.microsoft.com/en-us/library/ms229064(v=vs.100).aspx (Beachten Sie, dass Sie die Ausnahme serialisierbar machen sollten.) Fügen Sie einfach Ihre zusätzlichen Eigenschaften hinzu.

Sobald Sie die Ausnahmeklasse (LogException in Ihrem Fall) erstellt haben, funktioniert Ihr oben beschriebener Code.

Verwandte Themen