C# 中 yield关键字的使用

yield return有以下优点:

每次迭代时生成一个值,并且在下次迭代时继续从上次离开的地方开始。

延迟执行:只有在实际需要时才会生成下一个值,这对于处理大量数据非常有用。

节省内存:不需要一次性将所有数据加载到内存中。

csharp 复制代码
 IEnumerable<int> GenerateSequence(int max)
{
    for (int i = 0; i < max; i++)
    {
        Thread.Sleep(300);
        yield return i;
    }
}

List<int> GenerateSequence1(int max)
{
    List<int> ints = new List<int>();
    for (int i = 0; i < max; i++)
    {
        Thread.Sleep(300);
        ints.Add(i);
    }
    return ints;
}

// 使用
foreach (var number in GenerateSequence1(100000))
{
    Console.WriteLine(number);
}

foreach (var number in GenerateSequence(100000))
{
    Console.WriteLine(number);
}

结果就是GenerateSequence1 会卡死,GenerateSequence 每有一个元素进入IEnumerable, 都会打印出来

相关推荐
一位代码3 分钟前
python | requests爬虫如何正确获取网页编码?
开发语言·爬虫·python
看到我,请让我去学习9 分钟前
Qt 控件 QSS 样式大全(通用属性篇)
开发语言·c++·qt
筱砚.21 分钟前
【STL——vector容器】
开发语言·c++
mingupup21 分钟前
WPF/C#:使用Microsoft Agent Framework框架创建一个带有审批功能的终端Agent
c#·wpf
lly20240629 分钟前
数据访问对象模式(Data Access Object Pattern)
开发语言
std8602140 分钟前
Rust 与 Python – 这是未来的语言吗?
开发语言·python·rust
2503_930123931 小时前
Kubernetes (六)调度策略详解:从节点匹配到Pod调度全流程
java·开发语言
曾凡宇先生1 小时前
openEuler安装jdk,nginx,redis
linux·开发语言·数据库·openeuler
weixin_46681 小时前
Python编程之面向对象
开发语言·人工智能·python
YBN娜1 小时前
设计模式-创建型设计模式
java·开发语言·设计模式