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

相关推荐
csdn_wuwt1 小时前
前后端中Dto是什么意思?
开发语言·网络·后端·安全·前端框架·开发
print(未来)1 小时前
C++ 与 C# 的性能比较:选择合适的语言进行高效开发
java·开发语言
四问四不知1 小时前
Rust语言入门
开发语言·rust
JosieBook1 小时前
【Rust】 基于Rust 从零构建一个本地 RSS 阅读器
开发语言·后端·rust
云边有个稻草人1 小时前
部分移动(Partial Move)的使用场景:Rust 所有权拆分的精细化实践
开发语言·算法·rust
一晌小贪欢2 小时前
Pandas操作Excel使用手册大全:从基础到精通
开发语言·python·自动化·excel·pandas·办公自动化·python办公
松涛和鸣3 小时前
11.C 语言学习:递归、宏定义、预处理、汉诺塔、Fibonacci 等
linux·c语言·开发语言·学习·算法·排序算法
IT痴者4 小时前
《PerfettoSQL 的通用查询模板》---Android-trace
android·开发语言·python
2501_941111244 小时前
C++与自动驾驶系统
开发语言·c++·算法
2501_941111694 小时前
C++中的枚举类高级用法
开发语言·c++·算法