我不太明白这个问题 - 你像往常一样抛出异常。如果MyThing
实现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 中):
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
andtry/catch/finally
或展开using
- 我认为没有其他方法可以完成您的工作想。