如何处理一次性对象抛出的异常?

Meh*_*taş 7 c# idisposable

假设Constructor和Process方法可能抛出异常,使用Disposable对象的最佳方法是什么?我通常更喜欢以下实现之一.

  1. try-catch周围使用块

    try
    {
        using (Disposable dispObj = new Disposable())
        {
            dispObj.Process();
        }
    }
    catch (Exception ex)
    {
        // Do something
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. try-catch-finally块.

    Disposable dispObj2 = null;
    try
    {
        dispObj2 = new Disposable();
        dispObj2.Process();
    }
    catch (Exception ex)
    {
        // Do something
    }
    finally
    {
        if (dispObj2 != null)
        {
            dispObj2.Dispose();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

更新:

再说一遍:"假设Constuctor和Process方法可能抛出异常".我真的不明白为什么没有人关心他们答案中的异常.

Nik*_*wal 10

using很好.它有一个内置的try-finally块.如果发生异常,则自动调用dispose方法.

这可以

using (Disposable dispObj = new Disposable())
{
    dispObj.Process();
}
Run Code Online (Sandbox Code Playgroud)

  • 如果构造函数或处理方法抛出异常怎么办? (2认同)