具有多个IDisposable字段的类

时间:2018-07-17 15:24:46

标签: c#

是否存在实现IDisposable类DisposableClass1的最佳实践,该类包含多个DisisableClass2类型的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.
    }
}

0 个答案:

没有答案