我有一个包含需要处置的资源的类:
class Desert: IDisposable
{
private object resource; // handle to a resource
public Desert(string n)
{
// Create resource here
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (resource != null) resource.Dispose();
}
}
}
我想知道是否有任何方法可以自动要求框架在每个元素上调用 Dispose,每当 List 对象将被销毁时,就像我有析构函数一样。目前我正在循环列表并调用 Dispose:
// On form open
List<Desert> desertList = new List<Desert>();
for(int i = 0; i < 10; i++)
{
desertList.Add(new Desert("Desert" + i));
}
// On form closing
for (int i = 0; i < 10; i++)
{
desertList[i].Dispose();
}
这是在 List 中处理对象的唯一方法吗?
最佳答案
您可以扩展列表类型本身:
public class AutoDisposeList<T> : List<T>, IDisposable where T : IDisposable
{
public void Dispose()
{
foreach (var obj in this)
{
obj.Dispose();
}
}
}
using (var myList = new AutoDisposeList<Desert>())
{
}
如果您需要更多,您可以查看终结器。这些并不完全是析构函数 - 它们是在对象被垃圾收集之前运行的方法。不过,这些很容易出错,我投票支持 using 语句。
参见:https://msdn.microsoft.com/en-us/library/b1yfkh5e(v=vs.100).aspx
关于c# - 如何自动释放List中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46101315/