gpt4 book ai didi

c# - 在 C# 中使用 yield return 迭代器的目的/优势是什么?

转载 作者:IT王子 更新时间:2023-10-29 03:40:17 24 4
gpt4 key购买 nike

我见过的所有在 C# 方法中使用 yield return x; 的示例都可以通过返回整个列表以相同的方式完成。在这些情况下,使用 yield return 语法与返回列表相比有什么好处或优势吗?

另外,yield return 在什么情况下不能只返回完整的列表?

最佳答案

但是如果您自己构建一个集合呢?

通常,迭代器可用于延迟生成对象序列。例如 Enumerable.Range 方法内部没有任何类型的集合。它只会按需生成下一个数字。这种使用状态机的惰性序列生成有很多用途。其中大部分包含在函数式编程概念中。

在我看来,如果您只是将迭代器视为一种枚举集合的方式(它只是最简单的用例之一),那么您就走错了路。正如我所说,迭代器是返回序列的方法。该序列甚至可能是无限。没有办法返回无限长度的列表并使用前 100 个项目。它有时必须懒惰。 返回集合与返回集合生成器有很大不同(迭代器就是这样)。它将苹果与橙子进行比较。

假设的例子:

static IEnumerable<int> GetPrimeNumbers() {
for (int num = 2; ; ++num)
if (IsPrime(num))
yield return num;
}

static void Main() {
foreach (var i in GetPrimeNumbers())
if (i < 10000)
Console.WriteLine(i);
else
break;
}

此示例打印小于 10000 的素数。您可以轻松地将其更改为打印小于一百万的数字,而无需触及素数生成算法。在此示例中,您无法返回所有素数的列表,因为序列是无限的,而且消费者甚至不知道从一开始就想要多少项。

关于c# - 在 C# 中使用 yield return 迭代器的目的/优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1088442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com