C#聚合函数定义解释

2023-12-24

Enumerable.Aggregate 有 3 个重载版本。我找不到该函数的任何重载版本来匹配中使用的版本官方示例 https://msdn.microsoft.com/en-us/library/bb548651(v=vs.110).aspx.

public static TSource Aggregate<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, TSource, TSource> func
)

上面的定义与官方的例子完全不同:

string sentence = "the quick brown fox jumps over the lazy dog";

// Split the string into individual words.
string[] words = sentence.Split(' ');

// Prepend each word to the beginning of the 
// new sentence to reverse the word order.
string reversed = words.Aggregate((workingSentence, next) =>
                                      next + " " + workingSentence);

Console.WriteLine(reversed);

// This code produces the following output:
//
// dog lazy the over jumps fox brown quick the 

以下是聚合函数的 3 个重载版本:

public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);

public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);

public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);

它们都不与上面示例中使用的函数匹配。官方文档有错吗?或者我错过了什么?请帮助我弥合 3 个版本的函数定义和这个官方示例之间的差距。

如何理解函数定义?


public static TSource Aggregate<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, TSource, TSource> func
)

这实际上是官方示例中使用的:

string reversed = words.Aggregate((workingSentence, next) =>
                                      next + " " + workingSentence);

一些可能会让您感到困惑的部分是:

  1. the this前面的关键字source参数将其标识为扩展方法,这意味着上面的代码是以下语法糖:

    string reversed = Enumerable.Aggregate(words, (workingSentence, next) =>
                                      next + " " + workingSentence);
    
  2. TSource是一个通用参数,在本例中被替换为string因为编译器能够infer这种类型来自以下事实:words is an IEnumerable<string>.

  3. Func<TSource, TSource, TSource>是一个通用委托,表示一个带有两个参数(前两个参数)的函数TSources),并返回TSource。这与Action<TSource, TSource>,它将接受两个参数并且不返回值。这些类型中的任何一种都可以用 lambda 表达式来表示,其形式如下(param1, param2) => expression.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#聚合函数定义解释 的相关文章

随机推荐

  • PHP:更改 URL 参数

    这就是我所拥有的 echo
  • 为什么这个程序没有给出预期的输出? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么写入字符串时会出现分段错误 https stackoverflow com questions 164194 why do i get a segmentation fault when wri
  • MySQL:删除所有超过 10 分钟的行

    我的表中有一个时间戳字段 如何删除超过 10 分钟的记录 尝试过这个 DELETE FROM locks WHERE time created lt DATE SUB CURRENT TIME INTERVAL 10 MINUTE 没用 我
  • 翻译到世界坐标

    我有鼠标坐标 mousePos 矩阵视图view 以及透视投影矩阵pMatrix 我将坐标转换为世界坐标 找到逆投影矩阵和逆矩阵视图 然后乘以鼠标的坐标 原点坐标是z 4 终点坐标为z 100 在第一种情况下 我得到坐标mouseDir1
  • 期望数组参数具有设定的长度

    我是 Jest 的新手 所以如果这是一个明显的答案 请原谅我 但在滚动文档后我找不到答案 我有一个函数 funcA 它将不同长度的数组传递给另一个函数 funcB 取决于以下论点funcA收到 我正在尝试测试传递给的数组的长度funcB根据
  • 使用 JsonUtility 序列化 2D 数组

    所以我尝试使用 Unity JSON 实用程序保存一些数据 但遇到了一些麻烦 我有一个世界类 里面有一些参数 如宽度高度等 以及一个 Tiles 的二维数组 它是另一个类 缩小版 public class World SerializeFi
  • 为什么 netstat 没有列出我的套接字的开放端口?

    如果运行此示例 您将看到该端口从未列出netstat 为什么 我该如何做到这一点 include
  • 从 Wordpress 媒体库获取单个特定图像

    我已将图像上传到 Wordpress 媒体库 我知道我可以查看图像 然后获取该特定图像的 URL 然后使用imghtml 标签将其显示在页面上 然而这并没有得到alt title caption and description的图像 The
  • Yarn 中的“应用优先”

    我使用的是 Hadoop 2 9 0 是否可以在 YARN 中提交具有不同优先级的作业 根据一些 JIRA 票证 应用程序优先级似乎现已实施 我尝试使用YarnClient 并设置优先级ApplicationSubmissionContex
  • 是否可以像 LINQ 那样创建 C# 语言修改?

    我已经看了很多Skeet 先生关于如何重新实现 LINQ 的博客 http msmvps com blogs jon skeet archive 2011 02 23 reimplementing linq to objects part
  • 在其他控件上方显示透明加载微调器

    我正在旋转器控件中工作 我希望控件支持透明背景色 当绘制弧线时 中间有一个空白区域 我希望该空间是真正透明的 这样我就可以在其后面放置另一个控件 并且它不会被微调器覆盖 我尝试覆盖 CreateParams void 我还设置了支持透明颜色
  • org.springframework.orm.jpa.EntityManagerHolder 无法转换为 org.springframework.orm.hibernate5.SessionHolder

    我尝试将 Spring 与 Hibernate 5 一起使用 但出现此错误 org springframework orm jpa EntityManagerHolder 无法转换为 org springframework orm hibe
  • 执行 querySelector() 和 querySelectorAll() 操作的纯 Javascript 代码,包括 Shadowroots

    我正在尝试编写一个接受两个参数的方法 当前元素的parentNode之一 其中有许多带有shadowroots的childNodes 第二个参数是该元素的childNodes之一的shadowroots之一内的元素的id父节点参数我尝试使用
  • 在 Gunicorn Worker 之间共享锁

    有没有在gunicorn工作人员之间共享多处理锁的好方法 我正在尝试使用 Flask 编写 json API 一些 API 调用将与管理正在运行的进程的 python 类交互 例如用于视频转换的 ffmpeg 当我将 Web Worker
  • Android,熄屏时获取位置

    我使用带有 fused api 的已启动服务 并直接在其上实现位置侦听器 即使屏幕锁定 位置也会持续更新 但如果屏幕关闭 位置就会停止 那么 有没有什么方法可以确保屏幕关闭时位置保持更新呢 我读了很多其他问题 但我真的不知道我错过了什么 p
  • 在运行时选择方法实现

    我想通过选择从给定集合中调用的方法来配置对象在运行时的行为 考虑这个简单的例子 class Parameter class Conf class Obj public Obj const Conf t t t void f Paramete
  • 如何在 Eclipse Project Explorer 中删除 JAX-WS Web 服务节点?

    对于开发 我使用 Eclipse Helios 在项目资源管理器中我的一个项目中出现了一个新节点 它称为 JAX WS Web 服务 我不在我的项目中使用网络服务 该节点有两个子节点 服务端点接口和Web服务 两者都是空的 我还有其他一些项
  • ng-click 中的 jQuery 传递 html 元素引用

    NOTE 不是上面的重复 上面是访问单击的元素 这个问题是关于访问不同的元素 QUESTION 如何将元素 不是单击的元素 从我的 html 文档传递到 Angular 范围方法ng click 例子 http jsfiddle net L
  • 无法使用 Angular JS 获取选定选项

    致力于使用 Angular JS 获取选择标签的选定选项 当我更改选择标签时 我得到的属性值为 1 2 我需要的是 一 二 我的示例代码是 JS var app angular module myApp app controller myC
  • C#聚合函数定义解释

    Enumerable Aggregate 有 3 个重载版本 我找不到该函数的任何重载版本来匹配中使用的版本官方示例 https msdn microsoft com en us library bb548651 v vs 110 aspx