编写此功能:
static TResult reduce<TSource, TResult>(ParallelQuery<TSource> source,
Func<TResult> seedFactory,
Func<TResult, TSource, TResult> aggregator) {
return source.Aggregate(seedFactory, aggregator, aggregator, x => x);
}
但是我收到了编译错误:
错误1方法的类型参数 &#39; System.Linq.ParallelEnumerable.Aggregate(
System.Linq.ParallelQuery<TSource>
,TAccumulate
,System.Func<TAccumulate,TSource,TAccumulate>
,System.Func<TAccumulate,TAccumulate,TAccumulate>
,System.Func<TAccumulate,TResult>
)&#39; 无法从使用中推断出来。尝试明确指定类型参数。
我想要使用的重载是this one 虽然编译器似乎认为它也可以是this one。
我该如何帮助它?
答案 0 :(得分:5)
问题是你的第三个参数 - 方法声明中的第四个参数。这被宣布为:
// Note: type parameter names as per Aggregate declaration
Func<TAccumulate, TAccumulate, TAccumulate> combineAccumulatorsFunc
但你正试图传递
// Note: type parameter names as per reduce declaration
Func<TResult, TSource, TResult> aggregator
除非编译器知道TResult
可以转换为TSource
,否则它无效。
基本上,您的方法只采用单个聚合函数 - 如何将累加器到目前为止与另一个源值组合以创建另一个累加器。您要调用的方法需要另一个函数,它将两个累加器组合在一起以创建另一个累加器。我认为您将拥有以在您的方法中使用其他参数来实现此目的。