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

相关推荐
橘橙黄又青几秒前
List和Map篇
java·开发语言·面试
曹牧几秒前
Java:包含空字符字段的对象序列化为JSON字符串
java·开发语言
黎雁·泠崖2 分钟前
Java方法重写Override:规则+底层本质+与重载区别
java·开发语言
黑棠会长4 分钟前
ABP框架04.复杂业务关系实现(DDD实战)
数据库·c#·.net·ddd·abp
王同学 学出来4 分钟前
React实操案例(四)
开发语言·react.js·前端框架
zhengfei6116 分钟前
一种综合性的现代架构模型,用于集成平台解决方案和工具,以支持专业的红队。
开发语言·人工智能·网络安全·架构·信息与通信
zuoyou-HPU7 分钟前
QT C++开发知识点剖析
开发语言·c++·qt
草莓熊Lotso8 分钟前
Qt 按钮与显示类控件实战:从交互到展示全攻略
大数据·开发语言·c++·人工智能·qt·microsoft·交互
阿蒙Amon10 分钟前
C#每日面试题-简述类型实例化底层过程
java·面试·c#
莫问前路漫漫13 分钟前
Java static 与 final 详解(简单易懂)
java·开发语言