如何使用.NET 2.0在使用块中捕获异常?
我试图利用使用块越来越多这些天,当我有一个对象,实现IDisposable但有一件事我没有想出是如何捕捉异常,因为我会在正常的try/catch/finally。 ..任何代码示例指向我在正确的方向?如何使用.NET 2.0在使用块中捕获异常?
编辑:通过阅读答复后修改了该问题。这是“如何在.NET 2.0的使用块中抛出异常?”但我实际上正在寻找一种方法来捕获使用块内的这些异常。
我正在寻找更多的细节,在滚动我自己的捕捉块内使用块。
编辑:我想避免的是不得不在我的使用块内使用try/catch/finally,就像@Blair所示。但也许这是一个非问题...
编辑:@Blair,这正是我正在寻找,感谢您的详细回复!
我真的不明白这个问题 - 你会像平常那样抛出异常。 如果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
- 我不认为还有其他方法可以实现你想要的。
是的,抛出使用块的异常没有什么不同。 请记住,使用块基本转化为:
IDisposable disposable = null;
try
{
disposable = new WhateverYouWantedToMake();
}
finally
{
disposable.Dispose()
}
所以,你将不得不推出自己的追赶,如果你想赶上什么,但捕捉/投掷距离使用一个完全独立的问题。这个finally几乎可以保证执行(保存一个不可捕捉的异常(例如stackoverflow或outofmemory)或者将电源从PC中拔出)。
你需要有一个try语句捕捉异常
要么你可以使用块中使用try语句也可以在try块
使用using块,但你需要使用尝试阻止发生任何异常