c# - Parallel.ForEach 不喜欢 IList

标签 c# list parallel.foreach

以下代码无法编译。

IList configurationItems = dataSourceService.Get(configurationClass);
Parallel.ForEach(configurationItems, configurationItem =>
{...}

Parallel.ForEach 提示说,“无法从用法中推断出方法‘ForEach(IEnumerable,Action)’的类型参数。请尝试明确指定类型参数。”

我已经尝试了所有我能想到的 Actor 阵容,但没有一个奏效。我尝试深入研究 Parallel.ForEach 的重载的尝试同样没有成功。

最佳答案

你能制作IList吗?一个IList<T>

这里的问题是每次调用 Parallel.ForEach实际上是 Parallel.ForEach<T> - 带有类型参数的泛型方法。 C# 编译器在可能的情况下非常擅长猜测类型参数。此方法的签名为 ForEach<T>(IEnumerable<T>, Action<T>) .只要你提供一个IEnumerable<T>编译器知道 T 是什么用于整个调用。 IList不执行 IEnumerable<T> , 只是 IEnumerable ,所以编译器无法计算出该方法使用什么类型的参数。这是这里的投诉。

或者,如果卡在 IList 上你可以使用

Parallel.ForEach<T>(configurationItems.OfType<T>(), (T item) => ....);

其中 T 是您想要的实际类型。
我怀疑您不需要 ForEach 方法上的类型参数。您可能也不需要指定 lambda 表达式参数的类型。 OfType<T>可能足以让编译器推断出其余部分。

关于c# - Parallel.ForEach 不喜欢 IList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473130/

相关文章:

c# - 处理包含美元字符的正则表达式转义替换文本

c# - 比较两个列表 - 如果一个列表中的任何对象属性已更改或列表中添加了新对象,则返回该对象

database - grails:在 gsp 中显示数据库中的元素列表

list - 需要澄清 python 中列表的扩展函数。请检查下面的代码

c# - 使用 Parallel.ForEach 运行多组并行线程

c# - 这个 C# Parallel.ForEach "localFinally"方法线程安全吗?

c# - unity 旋转差和方向

c# - 如何在 .Net 2.0 的 sectionGroup applicationSettings 中按名称获取所有部分

c# - 使用 Moq 和 EF6 进行单元测试

c# - Parallel.Foreach 给出错误 "Index was outside the bounds of the array "