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

2024-04-16

这些天,当我有一个实现 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(使用前将#替换为@)

如何使用 .NET 2.0 捕获 using 块中的异常? 的相关文章

  • 如何在使用 python 下载时优雅地超时

    我正在循环下载大量文件 其中包含以下代码 try urllib urlretrieve url2download destination on local filesystem except KeyboardInterrupt break
  • 捕获所有内部异常详细信息的最佳实践是什么? [复制]

    这个问题在这里已经有答案了 记录完整异常详细信息 包括所有可能的内部异常 的最佳实践是什么 目前 我使用以下代码 try some code that throws an exception catch Exception ex do Co
  • 如何处理 Primefaces 延迟加载中的错误?

    我无法让用户知道发生的异常PrimeFaces http primefaces org LazyDataModel load方法 我正在从数据库加载数据 当引发异常时 我不知道如何通知用户 我尝试添加FacesMessage to Face
  • 使用 SqlBulkCopy 时提供流作为二进制列的数据源

    如果需要读取数据fromSqlServer 采用流式传输方式 有一些功能可以实现这一点 比如使用SqlDataReader with CommandBehavior SequentialAccess 特别是当需要访问二进制列数据时 有Get
  • 为什么从 ASP.NET 页面调用的 DLL 中出现异常后,我的 IIS7 应用程序池会关闭?

    我已阅读帖子ASP NET应用程序池关闭问题 https stackoverflow com questions 4742122 asp net application pool shutdown problem and IIS 7 5 应
  • 如何在 C# 中捕获等待的异步方法的异常?

    我基本上想知道在 C 中我应该如何捕获通过等待的异步方法的异常await关键词 例如 考虑以下小控制台程序 其中最重要的是包含一个名为AwaitSync AwaitSync calls TestAsync 它返回一个任务 执行时会抛出异常
  • 为什么 main() 中的 try-catch 不好?

    有人可以向我解释为什么在 main 方法中使用 try catch 来捕获未处理的异常被认为是不合适的吗 STAThread static void Main try Application Run new Form1 catch Exce
  • 如何正确关闭保存文件句柄

    我正在开发一个与 USB 设备通信的 C 项目 我打开连接 DllImport Kernel32 dll SetLastError true static extern Microsoft Win32 SafeHandles SafeFil
  • 2015 年重新审视 Ember Handling 401

    我可以在 Ember Ember Data 中找到大量询问 回答如何从 Rails 后端处理 401 的老问题 许多 如果不是全部的话 在这一点上似乎已经过时了 我已经尝试了我能找到的一切 Ember 数据处理 401 https stac
  • MetadataException:无法加载指定的元数据资源

    突然间我不断收到MetadataException在实例化我生成的ObjectContext班级 App Config 中的连接字符串看起来正确 自上次工作以来没有更改 我尝试从底层数据库重新生成一个新模型 edmx 文件 没有任何更改 有
  • 三层 Asp.Net 应用程序中的异常处理

    1 据我了解 在three tierAsp Net应用程序我们应该通过以下方式实现异常处理 a 我们应该把try catch围绕代码块 位于三层中的任何一层 我们希望页面能够从该代码块正常恢复 当此代码生成异常时 b 我们不应该放try c
  • API网关+Lambda+Python:处理异常

    我正在非代理模式下从 API Gateway 调用基于 Python 的 AWS Lambda 方法 我应该如何正确处理异常 以便使用部分异常设置适当的 HTTP 状态代码以及 JSON 正文 作为示例 我有以下处理程序 def my ha
  • Scala 中抛出异常,什么是“官方规则”

    我正在 Coursera 上学习 Scala 课程 我也开始阅读 Odersky 的 Scala 书 我经常听到的是 在函数式语言中抛出异常不是一个好主意 因为它破坏了控制流 并且我们通常返回一个失败或成功的 Either Scala 2
  • python多个 except 执行同一个方法时如何避免重复?

    我有如下代码块 try method except ErrorType1 todo return except ErrorType2 as e todo raise e 基本上对于两种错误类型 我需要执行todo 首先 然后return o
  • 如何在不使用 LINQ 的情况下按降序对 FileInfo 对象数组进行排序

    我必须降级我的代码才能在 NET 2 0 上工作 因为它不支持 LINQ 目前 该代码对数组进行排序FileInfo对象由他们FullName属性 使用 LINQ 如下所示 Dim files As FileInfo files files
  • 从 ADF Faces JSF 1.2 中的托管 bean 构造函数导航

    是否可以从托管 bean 的构造函数导航到另一个页面 视图 如果发生任何异常 我希望进行此重定向 我尝试了很多方法 Try 1 getFacesContext responseComplete getFacesContext getAppl
  • .NET 迭代器包装抛出 API

    我有一个带有 API 的类 它允许我请求对象 直到它抛出一个IndexOutOfBoundsException 我想将它包装到一个迭代器中 以便能够编写更清晰的代码 但是 我需要捕获异常以停止迭代 static IEnumerable It
  • 从远程托管上的 PHP 获取 PHP 错误日志

    是否有 PHP 函数或其他方式以字符串形式获取 PHP 错误日志 我需要这个 因为我无法访问在其他人的服务器上运行的站点的错误日志 他提出通过电子邮件将错误日志发送给我 但这不太方便 有什么方法可以将错误日志输出到 PHP 页面吗 我意识到
  • .Net 2.0 ServiceController.GetServices()

    我有一个启用了 Windows 身份验证的网站 从网站的页面中 用户可以启动一项对数据库执行某些操作的服务 启动该服务对我来说效果很好 因为我是服务器上的本地管理员 但我刚刚让一个用户测试了它 但他们无法启动该服务 我的问题是 有谁知道一种
  • C++,set_terminate 是每个线程本地的吗?

    Should set terminate get terminate在 C 2011 或 C 2003 中为多个线程设置不同的终止异常处理器 例如 如果我有程序并将终止处理程序设置为func 1 然后我启动3个线程 新线程中的终止处理程序是

随机推荐