c# - 具有多个 IDisposable 字段的类
问题描述
是否有实现 IDisposable 类 DisposableClass1 的最佳实践,该类包含多个 DisposableClass2 类型的 IDisposable 字段,其中:
- 构造函数 DisposableClass2 中的可能异常
- DisposableClass2 的 Dispose 方法中可能出现的异常
- 我们不能修改 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.
}
}
解决方案
推荐阅读
- unity3d - Unity:Mesh Renderer 似乎并不完美地适合 Edge
- regex - 使用 Perl 计算字符串中的非特殊字符
- java - 使用 Elastic Beanstalk 将文件上传到 S3 不起作用
- javascript - 如何使用画布和 JavaScript 使雪花形状旋转到其中心?
- python - 如何使用 Django 中的 FileField 在数据库中保存多个项目?
- node.js - Vue开发代理规则被忽略
- machine-learning - 试图通过回归来预测算法的运行时间
- prolog - 如何使用一系列事实限制 Prolog 中参数的值?
- python - QDataWidgetMapper 不会在所有 Windows 中更新
- node.js - 电子应用程序失败并输出神秘 - 使用 SIGSEGV 退出