首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parallel.ForEach不喜欢IList

Parallel.ForEach不喜欢IList
EN

Stack Overflow用户
提问于 2016-05-27 00:44:03
回答 1查看 951关注 0票数 4

以下代码未编译。

代码语言:javascript
复制
IList configurationItems = dataSourceService.Get(configurationClass);
Parallel.ForEach(configurationItems, configurationItem =>
{...}

Parallel.ForEach抱怨道,“无法从使用中推断出方法'ForEach(IEnumerable,Action)‘的类型参数。请尝试显式指定类型参数。”

我试过我能想到的每一种类型的演员,但没有一种是可行的。我为Parallel.ForEach挖掘重载的尝试也没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-27 00:47:47

你能把IList变成IList<T>吗?

这里的问题是,对Parallel.ForEach的每次调用实际上都是Parallel.ForEach<T> --一个带有类型参数的泛型方法。如果可能的话,C#编译器非常擅长猜测类型参数。此方法具有一个签名ForEach<T>(IEnumerable<T>, Action<T>)。只要您提供一个IEnumerable<T>,编译器就知道整个调用的T是什么。IList不实现IEnumerable<T>,只实现IEnumerable,因此编译器无法为该方法计算要使用的类型参数。这就是投诉。

或者,如果与IList卡在一起,则可以使用

代码语言:javascript
复制
Parallel.ForEach<T>(configurationItems.OfType<T>(), (T item) => ....);

其中T是你想要的实际类型。

不过,我怀疑您不需要ForEach方法上的类型参数。您可能也不需要指定lambda表达式参数的类型。OfType<T>可能已经足够编译器推断其馀部分了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37473130

复制
相关文章

相似问题

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