gpt4 book ai didi

exception - 如何使用 .NET 2.0 捕获 using block 中的异常?

转载 作者:行者123 更新时间:2023-12-02 22:17:35 26 4
gpt4 key购买 nike

这些天,当我有一个实现 IDisposable 的对象时,我越来越多地尝试利用 using block ,但我还没有弄清楚如何捕获异常,就像在正常的 try/catch/finally 中一样...有任何代码示例可以为我指明正确的方向吗?

编辑:阅读回复后修改了问题。这是“如何在 .NET 2.0 的 using block 中引发异常?”但我实际上正在寻找一种方法来捕获 using block 中的这些异常。

<小时/>

我正在寻找有关在 using block 内滚动我自己的捕获 block 的更多详细信息。

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

编辑:@Blair,这正是我正在寻找的内容,感谢您的详细回复!

最佳答案

我不太明白这个问题 - 你像平常一样抛出异常。如果 MyThing 实现 IDisposable,则:

using ( MyThing thing = new MyThing() )
{
...
throw new ApplicationException("oops");
}

并且 thing.Dispose 将在您离开 block 时被调用,因为异常会被抛出。如果你想组合 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 并在 finally block 中显式调用 Dispose,如 @Quarrelsome 所示,添加任何额外的异常处理或-您在finally(或在catch)中需要的恢复代码。

编辑:响应@Toran Billups,如果除了确保调用 Dispose 方法之外还需要处理异常,则必须使用 usingtry/catch/finally 或展开 using - 我认为没有其他方法可以完成您想要的任务。

关于exception - 如何使用 .NET 2.0 捕获 using block 中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com