我正在为一个类实现IDisposable,并且在处理时有一个一次性对象的内部列表。我应该通过循环来处理这些对象。
public Class MyDisposable
Implements IDisposable
private _disposbaleObjects as new List(of OtherDisposables)
Public Overloads Sub Dispose() Implements System.IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
? Should I dispose the the list like this ?
For Each obj In _disposbaleObjects
obj.dispose()
Next
End If
End If
Me.disposedValue = True
End Sub
End Class
答案 0 :(得分:12)
是的,遍历列表并处理每个项目。
您也可以编写扩展方法:
public static void Dispose(this IEnumerable<IDisposable> collection)
{
foreach (IDisposable item in collection)
{
if (item != null)
{
try
{
item.Dispose();
}
catch (Exception)
{
// log exception and continue
}
}
}
并将其命名为您的列表
_disposbaleObjects.Dispose()
答案 1 :(得分:2)
谁在列表中创建了对象?即谁负责他们的生命周期?如果MyDisposable
创建它们,则它有责任处置它们。如果其他人创建了它们,处理它们会使它们引用无用的对象。
答案 2 :(得分:1)
是的,你需要明确地处理这些对象中的每一个,就像你现在这样做一样。