gpt4 book ai didi

.net - 如何处理一次性元素 list ?

转载 作者:行者123 更新时间:2023-12-02 11:19:54 25 4
gpt4 key购买 nike

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

最佳答案

是的,迭代列表并处理每个项目。

您还可以编写扩展方法:

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
}
}
}
}

并为您的列表调用它

coll.Dispose()

一次性集合,实现IDisposable的集合:

public sealed class DisposableCollection<T> : Collection<T>, IDisposable
where T : IDisposable
{
public DisposableCollection(IList<T> items)
: base(items)
{
}

public void Dispose()
{
foreach (var item in this)
{
try
{
item.Dispose();
}
catch
{
// swallow
}
}
}
}

用法:

using (var coll = new DisposableCollection(items))
{
// use
}
// it has been disposed

关于.net - 如何处理一次性元素 list ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com