2009-04-24 51 views
0

我有一個IEnumerable<IDisposable>集合,我需要在給定點處置。問題在於,在某些情況下,所有對象都是一種類型,並且需要通過從對象收集一些數據並進行一次RPC調用來處理這些對象。在其他情況下,對象將是另一種類型,我只需要在每個對象上調用Dispose。如何結合IEnumerable <IDisposable>

我控制這樣做的代碼,但我寧可不推動實現的細節。

如果必須我可以切換到這樣的東西,但它似乎不雅。

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(); 
+0

你已經張貼什麼是真正的不是那麼糟糕的解決方案。我認爲你正在尋找一些根本不存在的東西,說實話。使用您的初始解決方案,並可能使用LINQ來簡化它,但僅此而已。 – Noldorin 2009-04-25 00:01:26

+0

我有點想當然,但只是希望有更好的東西。 – BCS 2009-04-27 17:39:06

回答

3

如果這取決於項目類型,那麼你可以做你得到了什麼樣的項目的檢查,加入到RPCDisposer只有那些特定類型。

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

但更好的是,如果你沒有將這些對象混合在同一個列表中。你可以重構你的代碼,讓他們在兩個不同的列表中?

1

的OfType方法可以幫助你的項目分成兩個列表...

var rpcItems = items.OfType<RPCItemType>();  
var normalItems = items.Where(x => !rpcItems.Contains(x)); 
相關問題