首页 > 解决方案 > 具有多个 IDisposable 字段的类

问题描述

是否有实现 IDisposable 类 DisposableClass1 的最佳实践,该类包含多个 DisposableClass2 类型的 IDisposable 字段,其中:

  1. 构造函数 DisposableClass2 中的可能异常
  2. DisposableClass2 的 Dispose 方法中可能出现的异常
  3. 我们不能修改 DisposableClass2

我写了一些代码来显示情况,但对我来说它看起来很难看。有没有办法改进它?

public class DisposableClass1 : IDisposable
{
    private List<DisposableClass2> DFields;

    public DisposableClass1()
    {
        DFields = new List<DisposableClass2>();
        try
        {
            for (var i = 0; i < 100; i++)
            {
                DFields.Add(new DisposableClass2());
            }
        }
        catch (Exception)
        {
            Dispose(throwException: false);
            throw;
        }
    }

    public void Dispose()
    {
        Dispose(throwException: true);
    }

    private void Dispose(bool throwException)
    {
        var exceptions = new List<Exception>();
        foreach (var f in DFields)
        {
            try
            {
                f.Dispose();
            }
            catch (Exception e)
            {
                exceptions.Add(e);
            }
        }

        if (exceptions.Count > 0 && throwException)
            throw new AggregateException(exceptions);
    }
}

// We can't modify this class
public class DisposableClass2 : IDisposable
{
    public DisposableClass2()
    {
        // May throw exception.
    }

    public void Dispose()
    {
        // May throw exception.
    }

    ~DisposableClass2()
    {
        // May throw exception.
    }
}

标签: c#

解决方案


推荐阅读