Я создаю экземпляр одноразового объекта (в моем случае 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;
бит.
Edit:
Просто чтобы уточнить: мне нужно избавиться от объекта только в случае DoWork()
сбой / выброс исключения. Если этот метод завершится успешно, я пока не хочу избавляться от объекта, так как в дальнейшем будет больше работы с ним.