假设我已经定义了一个类MyDisposable : IDisposable
,我知道我可以在using
语句中提供硬编码的IDisposable
对象列表:
using (MyDisposable firstDisposable = new MyDisposable(),
secondDisposable = new MyDisposable())
{
// do something
}
现在假设我有一些方法,用于对我的可处理对象集合执行操作,并且我想在 using
语句中执行这些操作。它可能看起来像这样(但当然这是不工作的,因为 using 块期望一个或多个 IDisposable
对象,而我正在传递一个单独的集合对象):
using (var myDisposables = GetMyDisposables())
{
foreach (var myDisposable in myDisposables)
{
DoSomething(myDisposable);
DoSomethingElse(myDisposable);
}
}
以下是其他几种方法,仅为了更清晰明了:
static List<MyDisposable> GetMyDisposables()
{
throw new NotImplementedException(); // return a list of MyDisposable objects
}
static void DoSomething(MyDisposable withMyDisposable)
{
// something
}
static void DoSomethingElse(MyDisposable withMyDisposable)
{
// something else
}
我可以使用 using
语句来实现这个吗?还是我必须放弃这个语句并手动处理释放?
DisposableCollection<T> : IDisposable, IEnumerable<T> where T : IDisposable
。它是一个实现了IDisposable
和IEnumerable<T>
接口的泛型类,其中T
必须是可释放的类型。 - LeeIDisposable
来封装您的MyDisposable
对象集合,并在您处理它时处理所有元素。 - Diligent Key Presser