c# - yield 关键字增值?

标签 c# iterator ienumerable yield

仍在努力寻找在实际情况下我会在哪里使用“yield”关键字。

我看到这个话题了

What is the yield keyword used for in C#?

但在接受的答案中,他们将此作为示例,其中有人围绕 Integers() 进行迭代

public IEnumerable<int> Integers()
{
yield return 1;
yield return 2;
yield return 4;
yield return 8;
yield return 16;
yield return 16777216;
}

但为什么不直接使用

list<int>

在这里。看起来更直接..

最佳答案

如果您构建并返回一个列表(假设它有 100 万个元素),那将是一大块内存,并且还需要进行创建它的工作。

有时调用者可能只想知道第一个元素是什么。或者他们可能希望在获得它们时将它们写入文件,而不是在内存中构建整个列表然后将其写入文件。

这就是为什么使用 yield return 更有意义。构建整个列表并返回它看起来并没有什么不同,但它非常不同,因为在调用者可以查看其中的第一项之前,不必在内存中创建整个列表。

当来电者说:

foreach (int i in Integers())
{
   // do something with i
}

每次循环需要一个新的 i 时,它都会运行更多 Integers() 中的代码。该函数中的代码在遇到 yield return 语句时“暂停”。

关于c# - yield 关键字增值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/384392/

相关文章:

c# - SQL异常 : String or binary data would be truncated

c# - 允许用户使用 Entity Framework 在运行时定义表

python - 您如何使用 python 遍历收件箱中的每封电子邮件?

c# - 对实现 IEnumerator 的类进行序列化

IEnumerable<T> 提供了两个 GetEnumerator 方法——它们之间有什么区别?

c# - 避免竞争条件?运算符(operator)

c# - System.Net.HttpListener (C#) 的最大 URL 长度

python - 如何在Python中多次使用迭代器

reference - 迭代器通过引用返回项目,生命周期问题

c# - 为什么我在迭代集合时不应该修改它