Es wird immer empfohlen Exceptions erneut zu werfen, statt diese zu ignorieren, um diese in der aufrufenden Funktion zu bearbeiten. Denn eine Funktion die nicht selber wirft, wird als exception safe angesehen.
Doch beim erneut werfen muss man beachten, dass man dies richtig tut:
FALSCH: catch (Exception ex) { throw ex; } RICHTIG: catch (Exception) { throw; }
Der Unterschied liegt darin, dass der Stacktrace im ersten Fall nicht die Funktion listet, welche die Ausnahme auslöst sondern nur die, die diese fängt.
Eine weitere Möglichkeit um das rethrowing korrekt auszuführen ist:
catch (Exception ex) { throw new Exception("New infos to add", ex); }
So können also zusätzliche Informationen hinzugefügt werden. Die ursprüngliche Exception und der Stacktrace bleiben in der InnerException erhalten.
—
Im Gegensatz zu Java gibt es in C# nicht die Möglichkeit anzugeben, welche Exceptions eine Funktion werden kann.