Я создаю экземпляр одноразового объекта (в моем случае 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