编写此函数:
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 方法的类型参数 'System.Linq.ParallelEnumerable.Aggregate(
System.Linq.ParallelQuery<TSource>
,TAccumulate
,System.Func<TAccumulate,TSource,TAccumulate>
,System.Func<TAccumulate,TAccumulate,TAccumulate>
,System.Func<TAccumulate,TResult>
)' 无法从使用情况中推断。尝试显式指定类型参数。
我想使用的重载是这个虽然编译器似乎认为它也可以是这个。
我该如何帮助它?
问题是你的第三个参数 - 方法声明中的第四个参数。这被声明为:
// 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
,否则这是无效的。
基本上,您的方法只采用单个聚合函数 - 如何将累加器与另一个源值组合以创建另一个累加器。您要调用的方法需要另一个函数,该函数将两个累加器组合在一起以创建另一个累加器。我认为您将不得不在方法中采用另一个参数才能正常工作。