Parallel.ForEach 不喜欢 IList
Parallel.ForEach Doesn't Like IList
以下代码无法编译。
IList configurationItems = dataSourceService.Get(configurationClass);
Parallel.ForEach(configurationItems, configurationItem =>
{...}
Parallel.ForEach抱怨,"The type arguments for method 'ForEach(IEnumerable,Action)' cannot be inferred from the usage. Try specifying the type arguments explicitly."
我已经尝试了我能想到的每一种演员表形式,并且 none 都有效。我试图深入研究 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>
可能足以让编译器推断出其余部分。
以下代码无法编译。
IList configurationItems = dataSourceService.Get(configurationClass);
Parallel.ForEach(configurationItems, configurationItem =>
{...}
Parallel.ForEach抱怨,"The type arguments for method 'ForEach(IEnumerable,Action)' cannot be inferred from the usage. Try specifying the type arguments explicitly."
我已经尝试了我能想到的每一种演员表形式,并且 none 都有效。我试图深入研究 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>
可能足以让编译器推断出其余部分。