私はクラスMyDisposable : IDisposable
を定義したとしましょう。私はusing
ステートメントにIDisposable
オブジェクトのハードコーディングされたリストを提供することができます知っている:動的に作成されたターゲットでusingステートメントを使用する方法はありますか?
using (MyDisposable firstDisposable = new MyDisposable(),
secondDisposable = new MyDisposable())
{
// do something
}
今度は、私は私の使い捨てのオブジェクトのコレクションに対して操作を実行するいくつかのメソッドを持っているとしましょう、と私はこれをしたいですusing
ステートメント内にあります。それは次のようになります(ただし、使用するブロックは、1つまたは複数の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を作成することができます:IDisposable、IEnumerable ここでT:IDisposable' –
Lee
'MyDisposable'オブジェクトのコレクションをカプセル化し、その要素をすべて破棄する' IDisposable'を書くことができますそれを処分する。 –
foreachブロック内にusingステートメントを追加してみませんか? – peinearydevelopment