0

我有一个IEnumerable<IDisposable>需要在给定时间处理的集合。问题在于,在某些情况下,所有对象都属于一种类型,并且需要通过从对象中收集一些数据并进行一次 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();
    }
}

但如果您不在同一个列表中混合这些对象,那就更好了。您能否重构您的代码以将它们保存在两个不同的列表中?

于 2009-04-24T22:25:02.777 回答
1

OfType 方法可能会帮助您将项目分成两个列表......

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