首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ManagementObjectCollection (.)处理Parallel.ForEach

使用ManagementObjectCollection (.)处理Parallel.ForEach
EN

Stack Overflow用户
提问于 2015-07-23 12:17:57
回答 1查看 420关注 0票数 1

我使用以下代码并行处理ManagementObjectCollection中的所有项:

代码语言:javascript
复制
using (ManagementObjectCollection results = this._searcher.Get())
{
    // The type arguments for method Parallel.ForEach<TSource>(...) cannot be inferred from usage
    Parallel.ForEach(results, (mo, loopState) =>
    {
        // process mo
    });
}

如果我指定了一个类型,它就会抱怨这一点。

代码语言:javascript
复制
using (ManagementObjectCollection results = this._searcher.Get())
{
    // Cannot convert from ManagementObjectCollection to [..].IEnumereable<ManagementObject>
    Parallel.ForEach<ManagementObject>(results, (mo, loopState) =>
    {
        // process mo
    });
}

我怎样才能使它正常工作呢?为什么第二个代码块不能工作( ManagementObjectCollection,AFAICS实现了IEnumerable,那么它为什么要抱怨)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-23 12:23:30

它实现了非泛型IEnumerable接口,从而使它成为一个IEnumerable<object>,而不是IEnumerable<ManagementObject>

我建议使用Cast<T>进行转换,它将在迭代时转换每个元素:

代码语言:javascript
复制
Parallel.ForEach(results.Cast<ManagementObject>(),
                (mo, loopState) =>
{
    // process mo
});

如果出于某种原因需要强类型列表,则可以在此之前进行强制转换:

代码语言:javascript
复制
var managementObjects = results.Cast<ManagementObject>().ToList();
Parallel.ForEach(managementObjects, (mo, loopState) =>
{
    // process mo
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31587126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档