Dan*_*Lee 5 c# list parallel.foreach
以下代码无法编译。
IList configurationItems = dataSourceService.Get(configurationClass);
Parallel.ForEach(configurationItems, configurationItem =>
{...}
Run Code Online (Sandbox Code Playgroud)
Parallel.ForEach 抱怨,“无法从用法中推断出方法 'ForEach(IEnumerable,Action)' 的类型参数。尝试显式指定类型参数。”
我尝试过所有我能想到的演员阵容,但没有一个有效。我尝试深入研究 Parallel.ForEach 的重载也同样不成功。
你能做IList一个IList<T>吗?
这里的问题是,每次调用Parallel.ForEach实际上都是Parallel.ForEach<T>带有类型参数的泛型方法。C# 编译器非常擅长在可能的情况下猜测类型参数。这个方法有一个签名ForEach<T>(IEnumerable<T>,\xe2\x80\x82Action<T>)。只要您提供一个,IEnumerable<T>编译器就知道T整个调用的内容。IList不实现IEnumerable<T>,只是IEnumerable,因此编译器无法计算出该方法使用什么类型参数。这是这里的投诉。
或者,如果卡住了IList你可以使用
Parallel.ForEach<T>(configurationItems.OfType<T>(), (T item) => ....);\nRun Code Online (Sandbox Code Playgroud)\n\n其中 T 是您想要的实际类型。
\n我怀疑您不需要 ForEach 方法上的类型参数。您可能也不需要指定 lambda 表达式参数的类型。OfType<T>可能足以让编译器推断其余部分。