Wie kann ein Objekt nur entsorgt werden, wenn eine Ausnahme ausgelöst wurde?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie kann ein Objekt nur entsorgt werden, wenn eine Ausnahme ausgelöst wurde?

Post by Anonymous »

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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post