以下代码无法编译。
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/