这些天,当我有一个实现 IDisposable 的对象时,我尝试越来越多地利用 using 块,但我还没有弄清楚的一件事是如何像在正常的 try/catch/finally 中一样捕获异常......有任何代码示例可以为我指明正确的方向吗?
编辑:阅读回复后修改了问题。这是“如何在 .NET 2.0 的 using 块中引发异常?”但我实际上正在寻找一种方法来捕获 using 块中的这些异常。
我正在寻找有关在 using 块内滚动我自己的捕获块的更多详细信息。
编辑:我想避免的是必须在我的 using 块中使用 try/catch/finally,如@Blair 所示。但也许这不是问题......
编辑:@Blair,这正是我正在寻找的,感谢您的详细回复!
我不太明白这个问题 - 你像平常一样抛出异常。
如果MyThing
实施IDisposable
, then:
using ( MyThing thing = new MyThing() )
{
...
throw new ApplicationException("oops");
}
And thing.Dispose
当您离开块时,将在抛出异常时调用。如果你想组合 try/catch/finally 和 using,你可以嵌套它们:
try
{
...
using ( MyThing thing = new MyThing() )
{
...
}
...
}
catch ( Exception e )
{
....
}
finally
{
....
}
(或者将try/catch/finally放在using中):
using ( MyThing thing = new MyThing() )
{
...
try
{
...
}
catch ( Exception e )
{
....
}
finally
{
....
}
...
} // thing.Dispose is called now
或者您可以展开using
并显式调用Dispose
in the finally
正如 @Quarrelsome 演示的那样,添加您需要的任何额外的异常处理或恢复代码finally
(或在catch
).
编辑:为了回应@Toran Billups,如果您除了确保您的Dispose
方法被调用,你要么必须使用using
and try/catch/finally
或展开using
- 我认为没有其他方法可以实现你想要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)