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人说,“让我们把所有的东西都扔进去,这会让他们闭嘴。”是的,这是一个很好的观点,我没有想到这一点。我一直有点困扰,不知道背后的原因,这超载。