Как удалить объект только при возникновении исключения?C#

Место общения программистов C#
Ответить
Anonymous
 Как удалить объект только при возникновении исключения?

Сообщение Anonymous »

Я создаю экземпляр одноразового объекта (в моем случае FileStream) в своем конструкторе, и мне нужно над ним поработать. Однако это может вызвать любое количество различных исключений. Теперь я даже не хочу слишком сильно возиться с этими исключениями и хочу, чтобы они распространялись до вызывающего абонента. Однако сначала мне нужно удалить объект. Как лучше всего это сделать? Сейчас я могу думать только о чем-то таком:

Код: Выделить всё

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();
}
Это вообще правильно или Dispose() будет пропущен в некоторых особых случаях? Есть ли более простой способ сделать это? Это становится немного громоздким, если по какой-либо причине вам нужно перехватить кучу разных исключений отдельно, и вам всегда нужно копировать и вставлять этот бит error = true;.

Изменить:
Просто чтобы уточнить: мне нужно удалить объект только в случае сбоя DoWork() или выдачи исключения. Если этот метод увенчается успехом, я пока не хочу удалять объект, так как с ним придется еще поработать позже.

Подробнее здесь: https://stackoverflow.com/questions/771 ... was-raised
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»