1

yield return这个概念的正式名称到底是什么?

public IEnumerable<T> Bar() {
    ...
    yield return foo;
    ...
}

我听说(读)它被称为:

  • 迭代器
  • IEnumerabe
  • 发电机
  • <你的选择>

迭代器不只是一些迭代某物的“东西”吗?AList<T> 一个IEnumerable<T>,所以看起来也不合理。

SO上有很多关于yield return使用这两个术语之一的答案。

“发电机”呢?还是仅当您“凭空想出值”时才适用,例如不需要数据收集作为来源的斐波那契数列?

4

3 回答 3

5

作为非语言特定方式的一般概念,“生成器”可能是最常见的术语。如果我与不熟悉 C# 的人交谈,我会使用它。

该方法本身是C# 规范术语中的迭代器。实现是一个迭代器块

从 C# 4 规范的第 10.14 节:

使用迭代器块(第 8.2 节)实现的函数成员(第 7.5 节)称为迭代器

这是我在专门谈论 C# 时会使用的术语。

于 2012-08-03T16:25:16.520 回答
3

它的主要用途是“协程”。参见维基百科

协程是计算机程序组件,它概括了子程序以允许在某些位置暂停和恢复执行的多个入口点。协程非常适合实现更熟悉的程序组件,例如协作任务、迭代器、无限列表和管道。

于 2012-10-03T13:08:11.837 回答
1

它被称为迭代器,查看这个MSDN页面

迭代器是使用 yield 关键字对数组或集合类执行自定义迭代的方法、get 访问器或运算符

于 2012-08-03T16:26:06.383 回答