Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么存在带有resultSelector重载的Enumerable.Aggregate?_C#_Linq - Fatal编程技术网

C# 为什么存在带有resultSelector重载的Enumerable.Aggregate?

C# 为什么存在带有resultSelector重载的Enumerable.Aggregate?,c#,linq,C#,Linq,我想知道这个超载的目的是什么 public static TResult Aggregate<TSource,TAccumulate,TResult> ( this System.Collections.Generic.IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate,TSource,TAccumulate> func, Func<TAccumu

我想知道这个超载的目的是什么

public static TResult Aggregate<TSource,TAccumulate,TResult> (
    this System.Collections.Generic.IEnumerable<TSource> source,
    TAccumulate seed,
    Func<TAccumulate,TSource,TAccumulate> func,
    Func<TAccumulate,TResult> resultSelector);
publicstatictresult聚合(
此System.Collections.Generic.IEnumerable源,
玉米粒,
Func Func,
Func结果选择器);
相比

public static TAccumulate Aggregate<TSource,TAccumulate> (
    this System.Collections.Generic.IEnumerable<TSource> source,
    TAccumulate seed,
    Func<TAccumulate,TSource,TAccumulate> func);
公共静态累积聚合(
此System.Collections.Generic.IEnumerable源,
玉米粒,
Func Func);

当您可以只处理返回的
tacumulate
时,让
resultSelector
重载似乎是多余的。我有没有遗漏什么好处?

你没有遗漏任何东西,它是多余的,也不是很有用。如果您查看源代码,它只会在最后执行以下操作:

return resultSelector(result);
可能其基本原理是使API与相关的
SelectMany
方法更加一致,该方法还采用了可选的结果选择器(这实际上会产生不同)


或者允许更流畅的语法-尽管使用此重载是否真的使代码更易于阅读值得怀疑。

基本上,这是
var x=points.Aggregate(seed,(a,p)=>a+p,p=>p.x)之间的区别
var x=points.Aggregate(种子,(a,p)=>a+p).x
。基本上,它只会在聚合完成后返回您感兴趣的值。因为大多数时候,人们都在抱怨缺少重载,所以LINQ人说,“让我们把所有的东西都扔进去,这会让他们闭嘴。”是的,这是一个很好的观点,我没有想到这一点。我一直有点困扰,不知道背后的原因,这超载。