我使用以下代码并行处理ManagementObjectCollection中的所有项:
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
});
}如果我指定了一个类型,它就会抱怨这一点。
using (ManagementObjectCollection results = this._searcher.Get())
{
// Cannot convert from ManagementObjectCollection to [..].IEnumereable<ManagementObject>
Parallel.ForEach<ManagementObject>(results, (mo, loopState) =>
{
// process mo
});
}我怎样才能使它正常工作呢?为什么第二个代码块不能工作( ManagementObjectCollection,AFAICS实现了IEnumerable,那么它为什么要抱怨)?
发布于 2015-07-23 12:23:30
它实现了非泛型IEnumerable接口,从而使它成为一个IEnumerable<object>,而不是IEnumerable<ManagementObject>。
我建议使用Cast<T>进行转换,它将在迭代时转换每个元素:
Parallel.ForEach(results.Cast<ManagementObject>(),
(mo, loopState) =>
{
// process mo
});如果出于某种原因需要强类型列表,则可以在此之前进行强制转换:
var managementObjects = results.Cast<ManagementObject>().ToList();
Parallel.ForEach(managementObjects, (mo, loopState) =>
{
// process mo
});https://stackoverflow.com/questions/31587126
复制相似问题