如何使用.NET 2.0捕获使用块中的异常?

Tor*_*ups 4 error-handling ado.net exception .net-2.0

我正在尝试越来越多地利用using块这些天我有一个实现IDisposable的对象,但我还没想到的一件事是如何捕获异常,就像在普通的try/catch/finally中一样...任何代码样本指向正确的方向?

编辑:在阅读完回复后,问题被修改了.它是"如何在.NET 2.0的使用块中抛出异常?" 但我实际上是在寻找一种方法来捕获使用块内的这些异常.


我正在寻找有关在使用块中滚动我自己的捕获块的更多细节.

编辑:我想避免的是必须在我的使用块中使用try/catch/finally,如@Blair所示.但也许这不是问题......

编辑:@Blair,这正是我想要的,感谢您的详细回复!

Bla*_*rad 7

我真的不明白这个问题 - 你像往常一样抛出异常.如果是MyThingimplements IDisposable,那么:

using ( MyThing thing = new MyThing() )
{
    ...
    throw new ApplicationException("oops");
}
Run Code Online (Sandbox Code Playgroud)

thing.Dispose当你离开块将被调用,因为异常的抛出.如果你想组合一个try/catch/finally和一个using,你可以嵌套它们:

try
{
    ...
    using ( MyThing thing = new MyThing() )
    {
        ...
    }
    ...
}
catch ( Exception e )
{
    ....
}
finally
{
    ....
}    
Run Code Online (Sandbox Code Playgroud)

(或者将try/catch/finally放在使用中):

using ( MyThing thing = new MyThing() )
{
    ...
    try
    {
        ...
    }
    catch ( Exception e )
    {
        ....
    }
    finally
    {
        ....
    }    
    ...
} // thing.Dispose is called now
Run Code Online (Sandbox Code Playgroud)

或者您可以在@Quarrelsome演示中展开using并显式调用块,在(或)中添加您需要的任何额外的异常处理或恢复代码.Disposefinallyfinallycatch

编辑:为了回应@Toran Billups,如果你需要处理异常,除了确保你的Dispose方法被调用,你要么必须使用using和/ try/catch/finally或展开using- 我不认为有任何其他方法来实现你的想.