0

IEnumerable<IDisposable>特定の時点で処分する必要があるコレクションがあります。問題は、場合によっては、すべてのオブジェクトが 1 つのタイプであり、オブジェクトからデータを収集して単一の RPC 呼び出しを行うことによって、オブジェクトを破棄する必要があることです。それ以外の場合、オブジェクトは別の型になり、それぞれに対して Dispose を呼び出すだけで済みます。

私はこれを行うコードを制御しますが、実装の詳細をコードにプッシュしたくありません。

必要に応じて、このようなものに切り替えることができますが、エレガントではないようです。

with(var rpc = new RPCDisposer())
{
    foreach (var item in Items)
    {
        rpc.Add(item);
        item.Dispose();
    }
}

編集:リスト (今のところ) にはどちらか一方のみが含まれ、両方は含まれません。しかし、私は、Dispose コードが RPC のことをまったく知らなくてもよいようにしたいと思います。ei:

foreach (var item in Items)
    item.Dispose();
4

2 に答える 2

3

これがアイテムの種類に依存する場合は、取得したアイテムの種類を確認して、その特定の種類のアイテムのみを RPCDisposer に追加することができます。

using(var rpc = new RPCDisposer())
{
    foreach (var item in Items)
    {
        if (item is RPCItemType)
            rpc.Add(item);
        item.Dispose();
    }
}

しかし、これらのオブジェクトを同じリストに混在させない方がよいでしょう。コードをリファクタリングして、それらを 2 つの異なるリストに保持できますか?

于 2009-04-24T22:25:02.777 に答える
1

OfType メソッドは、項目を 2 つのリストに分けるのに役立つ場合があります...

var rpcItems = items.OfType<RPCItemType>();    
var normalItems = items.Where(x => !rpcItems.Contains(x));
于 2009-04-24T22:36:41.097 に答える