【问题标题】:What is the name of the "yield return" concept? IEnumerable, Iterator, Generator?“收益回报”概念的名称是什么? IEnumerable、迭代器、生成器?
【发布时间】:2012-08-01 17:30:25
【问题描述】:

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

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

我听说(读到)它被称为:

  • 迭代器
  • IEnumerabe
  • 发电机

迭代器不就是迭代某事物的“事物”吗? List&lt;T&gt; IEnumerable&lt;T&gt;,所以看起来也不合理。

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

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

【问题讨论】:

标签: c# ienumerable terminology yield


【解决方案1】:

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

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

来自 C# 4 规范的第 10.14 节:

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

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

【讨论】:

  • 我确实想知道,为什么他们要使用已经 established name 来换取不同的东西? (我可以看到yield 极大地简化了编写迭代器)
【解决方案2】:

它的主要用途是“协程”。见Wikipedia

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

【讨论】:

    【解决方案3】:

    这叫做迭代器,看看这个MSDN页面

    迭代器是一种方法、get 访问器或操作符,它执行 使用 yield 对数组或集合类进行自定义迭代 关键词

    【讨论】:

    • 从技术上讲,我猜这听起来不错,只是听起来很有趣;p
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2010-09-22
    • 1970-01-01
    • 2020-06-29
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多