Ich instanziiere ein verfügbares Objekt (in meinem Fall einen FileStream) in meinem Konstruktor und muss daran arbeiten. Dies kann jedoch eine beliebige Anzahl unterschiedlicher Ausnahmen auslösen. Jetzt möchte ich mich nicht einmal zu sehr mit diesen Ausnahmen herumschlagen und zulassen, dass sie sich an den Aufrufer weitergeben. Allerdings muss ich das Objekt zuerst entsorgen. Wie geht das nun am besten? Im Moment fällt mir nur so etwas ein:
Code: Select all
IDisposable disposableObject = InstantiateDisposable();
bool error = false;
try
{
DoWork(disposableObject);
}
catch (ReallyBadException e)
{
error = true;
throw new EvenWorseException("some message", e);
}
catch (Exception)
{
error = true;
throw;
}
finally
{
if (error) disposableObject.Dispose();
}
Ist das überhaupt richtig oder wird Dispose() in einigen Sonderfällen übersprungen? Gibt es einen einfacheren Weg, das zu tun? Es wird etwas umständlich, wenn Sie aus irgendeinem Grund eine Reihe verschiedener Ausnahmen separat abfangen müssen und immer das Bit „error = true;“ kopieren und einfügen müssen.
Bearbeiten:
Nur zur Klarstellung: Ich muss das Objekt nur entsorgen, wenn DoWork() fehlschlägt oder eine Ausnahme auslöst. Wenn diese Methode erfolgreich ist, möchte ich das Objekt noch nicht entsorgen, da später noch mehr Arbeit damit zu tun ist.