以下代码未编译。
IList configurationItems = dataSourceService.Get(configurationClass);
Parallel.ForEach(configurationItems, configurationItem =>
{...}Parallel.ForEach抱怨道,“无法从使用中推断出方法'ForEach(IEnumerable,Action)‘的类型参数。请尝试显式指定类型参数。”
我试过我能想到的每一种类型的演员,但没有一种是可行的。我为Parallel.ForEach挖掘重载的尝试也没有成功。
发布于 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卡在一起,则可以使用
Parallel.ForEach<T>(configurationItems.OfType<T>(), (T item) => ....);其中T是你想要的实际类型。
不过,我怀疑您不需要ForEach方法上的类型参数。您可能也不需要指定lambda表达式参数的类型。OfType<T>可能已经足够编译器推断其馀部分了。
https://stackoverflow.com/questions/37473130
复制相似问题