Mögliche duplizieren (und nichts anderes!):
difference between throw and throw new Exception()"Wurf" in einem catchblock Mit
Ich bin ein Programmierer auf das Hinzufügen neuer Funktionen zu Legacy-Code zu arbeiten. Während des Debuggens analysiert ich diesen Catch-Block über, die eine wütende bekam „Objekt nicht auf Bezug des Objektes“ Ankündigung von Visual Studio:
catch(Exception ex)
{
SporeLog.Log("Failed to create new SavedDocumentList with Name: " + name, ex);
throw;
}
Was es zu „werfen“ bedeutet. Ich bin vertraut mit throw new [exceptiontype]...
aber was bedeutet es, nur ... throw
?
Ist diese gute Praxis, oder sollte ich diesen Code ändern, um die Versuche der Entwickler nach mir zu erleichtern?
Und warum schreit Visual Studio mich an, um dies zu tun?
Siehe [Unterschied zwischen throw und throw new Exception()] (http://stackoverflow.com/questions/2999298/difference-between-throw-and-throw-new-exception). Im Grunde können Sie etwas tun (z. B. in Ihrem Beispiel anmelden) und die Ausnahme weiter verbreiten lassen. Wichtig ist, dass es die Stack-Trace nicht unterbricht. –
Während hilfreich, das erklärt nicht, warum Visual Studio 2008 mich dafür schreit. Ich habe meine Frage bearbeitet, um meine ursprüngliche Absicht, Fragen zu stellen, besser widerzuspiegeln und zu stimmen. –
Der 'throw' verursacht * nicht die' NullReferenceException'. Wie unten in den Antworten angegeben, wirft die throw-Anweisung die Ausnahme erneut, ohne den StackTrace zurückzusetzen.Wenn ich die Nuancen Ihrer Frage verstehe, handelt es sich bei der * ursprünglichen * Ausnahme um eine NullReferenceException, die nicht * behandelt werden konnte. Der ursprüngliche Coder hat sie also protokolliert und neu gezeichnet, damit sie möglicherweise anderswo behandelt werden kann. – Toby