C# 中的重载解析:函数<T>参数



编写此函数:

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>TAccumulateSystem.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,否则这是无效的。

基本上,您的方法只采用单个聚合函数 - 如何将累加器与另一个源值组合以创建另一个累加器。您要调用的方法需要另一个函数,该函数将两个累加器组合在一起以创建另一个累加器。我认为您将不得不在方法中采用另一个参数才能正常工作。

相关内容

  • 没有找到相关文章

最新更新