我正在尝试越来越多地利用using块这些天我有一个实现IDisposable的对象,但我还没想到的一件事是如何捕获异常,就像在普通的try/catch/finally中一样...任何代码样本指向正确的方向?
编辑:在阅读完回复后,问题被修改了.它是"如何在.NET 2.0的使用块中抛出异常?" 但我实际上是在寻找一种方法来捕获使用块内的这些异常.
我正在寻找有关在使用块中滚动我自己的捕获块的更多细节.
编辑:我想避免的是必须在我的使用块中使用try/catch/finally,如@Blair所示.但也许这不是问题......
编辑:@Blair,这正是我想要的,感谢您的详细回复!
我真的不明白这个问题 - 你像往常一样抛出异常.如果是MyThing
implements IDisposable
,那么:
using ( MyThing thing = new MyThing() ) { ... throw new ApplicationException("oops"); }
而thing.Dispose
当你离开块将被调用,因为异常的抛出.如果你想组合一个try/catch/finally和一个using,你可以嵌套它们:
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
或者您可以在@Quarrelsome演示中展开using
并显式调用块,在(或)中添加您需要的任何额外的异常处理或恢复代码.Dispose
finally
finally
catch
编辑:为了回应@Toran Billups,如果你需要处理异常,除了确保你的Dispose
方法被调用,你要么必须使用using
和/ try/catch/finally
或展开using
- 我不认为有任何其他方法来实现你的想.