我真的不明白这个问题 - 你会像平常那样抛出异常。 如果MyThing
工具IDisposable
,则:
using (MyThing thing = new MyThing())
{
...
throw new ApplicationException("oops");
}
而且thing.Dispose
你离开块将被调用,因为异常的抛出。如果你想一个try/catch /终于结合和使用,您可以嵌套它们:
try
{
...
using (MyThing thing = new MyThing())
{
...
}
...
}
catch (Exception e)
{
....
}
finally
{
....
}
(或者把的try/catch /最后的使用):
using (MyThing thing = new MyThing())
{
...
try
{
...
}
catch (Exception e)
{
....
}
finally
{
....
}
...
} // thing.Dispose is called now
或者你可以展开的using
和显式调用Dispose
在finally
块为@Quarrelsome证实,并称需要在finally
(或catch
)任何额外的异常处理或-recovery代码。
编辑:针对@Toran比卢普斯,如果你需要从确保您Dispose
方法被调用一边处理异常,你要么必须使用using
和try/catch/finally
或展开的using
- 我不认为还有其他方法可以实现你想要的。