如何处理一次性物品清单?

时间:2010-07-18 17:23:47

标签: .net vb.net idisposable

我正在为一个类实现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

3 个答案:

答案 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)

是的,你需要明确地处理这些对象中的每一个,就像你现在这样做一样。