Was mit Exceptions in catch-Blöcken?

Was mache ich, wenn Exceptions in catch-Blöcken auftreten können.

Es kann ja sein, dass ein Fehler auftritt und ich anschließend im Catch-Block ein paar Aufräumarbeiten machen muss und wenn dann bei dem Aufräumarbeiten was schief geht?

catch (SmtpException ex)
{
 // do some cleaning up

 throw;
}

Wie gehe ich damit um? Ich kann ja schlecht 2 Exceptions gleichzeitig werfen.

Hallo!
Klar kannst Du in der catch-clause auch strukturierte Fehlerbehandlung einsetzen, warum nicht?
Einfach im catch nochmal ein try/catch. Wenn Du im inneren try/catch eine Exception nicht fängst, fliegt sie aus dem äußeren catch raus und kann ggf. weiter oben in der Aufrufhierarchie gefangen werden.

Gruß,
Martin

Einfach im catch nochmal ein try/catch. Wenn Du im inneren
try/catch eine Exception nicht fängst, fliegt sie aus dem
äußeren catch raus und kann ggf. weiter oben in der
Aufrufhierarchie gefangen werden.

An der Stelle verliere ich aber die Information über die ursprüngliche Exception, die dafür verantwortlich war, dass überhaupt der Cache-Block betreten wurde.

Hallo nochmal!
Nicht unbedingt. Folgendes Beispiel:

try
{
 //machwas
}
catch (Exception outer)
{
 Log("Problem: "+outer.Message);
 try
 {
 // Aufräumarbeiten
 }
 catch (Exception inner)
 {
 Log("Beim Aufräumen gab es ein Problem: "+inner.ToString());
 inner.InnerException = outer;
 throw inner;
 }
}

Damit wird eine Ausnahme nur geworfen, wenn die Aufräumarbeiten ebenfalls eine Exception bekamen.
Ansonsten kracht’s oben, unten wird aufgeräumt und von außen sieht man (außer der Protokollierung) nichts von den Ausnahmen.
Wenn eine Exception geworfen wird, dann hat man die ursprüngliche Ausnahme in der InnerException und die Ausnahme beim Aufräumen in der geworfenen Ausnahme selbst.

Gruß,
Martin