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, 都会打印出来

相关推荐
代码N年归来仍是新手村成员3 分钟前
【Java转Go】即时通信系统代码分析(一)基础Server 构建
java·开发语言·golang
Z1Jxxx26 分钟前
01序列01序列
开发语言·c++·算法
沐知全栈开发40 分钟前
C语言中的强制类型转换
开发语言
关于不上作者榜就原神启动那件事1 小时前
Java中大量数据Excel导入导出的实现方案
java·开发语言·excel
坚定学代码1 小时前
基于观察者模式的ISO C++信号槽实现
开发语言·c++·观察者模式·ai
Wang's Blog1 小时前
Nodejs-HardCore: Buffer操作、Base64编码与zlib压缩实战
开发语言·nodejs
csbysj20201 小时前
C# 集合(Collection)
开发语言
csbysj20202 小时前
Lua 面向对象编程
开发语言
左直拳3 小时前
将c++程序部署到docker
开发语言·c++·docker