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

相关推荐
道剑剑非道6 分钟前
QT开发技术【ffmpeg EVideo录屏软件 一】
开发语言·qt·ffmpeg
oioihoii25 分钟前
C++11 Generalized(non-trivial) Unions:从入门到精通
java·开发语言·c++
谢尔登41 分钟前
【Three.js】初识 Three.js
开发语言·javascript·ecmascript
H21220216543 分钟前
P5 QT项目----会学网络调试助手服务端(5.1)
开发语言·网络·qt
C++ 老炮儿的技术栈1 小时前
文本文件与二进制文件的区别
大数据·c语言·开发语言·c++·git·算法·visual studio
君鼎1 小时前
C++标准库大全(STL)
开发语言·c++·stl
委婉待续3 小时前
Qt的学习(三)
开发语言·qt·学习
白总Server3 小时前
Golang实现分布式Masscan任务调度系统
java·运维·服务器·开发语言·分布式·后端·golang
leo03083 小时前
新一代python管理工具--uv
开发语言·python·uv
熊猫钓鱼>_>3 小时前
Python小工具开发实战:从零构建自动化文件管理器的心得与体悟
开发语言·python·自动化