2016-09-07 2 views
0

Gibt es einen Weg besser als das, was ich unten geschrieben habe, um eine Ausnahme richtig eingestellt zu bekommen, wie wenn geworfen?Erstellen C# Ausnahme und nicht werfen

try { 
throw new Exception("Blah"); 
} 
catch (Exception exe) { 
Assert.NotNull(exe.StackTrace); 
DoSomeWork(exe); 
// throw; 
} 
+0

'var myExceptionIDontWantToThrow = new Exception (" Blah ");' – Phylogenesis

+1

Was meinst du mit "besser"? Was meinst du mit "richtig eingestellt wie wenn geworfen"? Was ist dein Endziel? – CodeCaster

+1

Was meinst du mit richtig eingestellt? Was ist Ihre erwartete Leistung? – solarc

Antwort

1

Die kurze Antwort ist: NEIN.

System.Exception Die Eigenschaften sind in when it is thrown gefüllt:

Standardmäßig wird die Stapelüberwachung erfasst, unmittelbar bevor ein Objekt Ausnahme ausgelöst. Verwenden Sie Environment.StackTrace, um Stack-Trace-Informationen zu erhalten, wenn keine Ausnahme ausgelöst wird.

Also, wenn Sie wirklich ein exception Objekt in dem Zustand, müssen sie nach geworfen wird, haben Sie keine andere gute Möglichkeit, aber es zu werfen und zu fangen.

Immer noch nicht die Hauptfrage fallen lassen: Brauchen Sie wirklich das Ausnahmeobjekt?

Wenn Sie eine Methode haben, die System.Exception als Eingabeparameter hat und Sie brauchen einen Stacktrace im Inneren, denken Sie an diese möglichen Lösungen:

  1. -Methodenüberladung mit einem optionalen Stacktrace Eingangsparameter.
  2. Ein Nachfolger von System.Exception mit einer versteckten StackTrace-Eigenschaft, die den StackTrace speichert, wenn das Objekt erstellt und nicht ausgelöst wird.
  3. Als letztes Mittel Sie eine Erweiterungsmethode für die System.Exception Klasse machen könnte, die "auffüllt" eine Instanz der System.Exception:

    private void MyCode() 
    { 
        Exception exe = new Exception("Blah"); 
        exe.Populate(); 
        DoSomeWork(exe); 
    } 
    
    
    public static void Populate(this System.Exception source) 
    { 
        try 
        { 
         throw source; 
        } 
        catch 
        { 
        } 
    } 
    
Verwandte Themen