Я не совсем понимаю вопрос - вы бросаете исключение, как обычно.
Если MyThing
реализует IDisposable
, то:
using ( MyThing thing = new MyThing() )
{
...
throw new ApplicationException("oops");
}
И thing.Dispose
будут вызываться при выходе из блока, как исключение. Если вы хотите объединить try / catch / finally и использование, вы можете вложить их:
try
{
...
using ( MyThing thing = new MyThing() )
{
...
}
...
}
catch ( Exception e )
{
....
}
finally
{
....
}
(или поместите try / catch / finally в использование):
using ( MyThing thing = new MyThing() )
{
...
try
{
...
}
catch ( Exception e )
{
....
}
finally
{
....
}
...
} // thing.Dispose is called now
Или вы можете развернуть using
и явно вызвать Dispose
в блоке finally
, как продемонстрировал @Quarrelsome, добавив любой дополнительный код обработки исключений или -recovery, который вам нужен в finally
(или catch
).
РЕДАКТИРОВАТЬ: В ответ на @Toran Billups, если вам нужно обрабатывать исключения помимо проверки того, что вызван ваш метод Dispose
, вам придется либо использовать using
и try/catch/finally
, либо развернуть using
- Я не думаю, что есть какой-то другой способ выполнить то, что вы хотите.