当前位置: 首页 > ai >正文

C#中IEnumerable 、IAsyncEnumerable、yield

C#中IEnumerable 、IAsyncEnumerable、yield

    • 概念总览
    • 1. IEnumerable 接口
      • 基本概念
      • 示例:自定义集合
    • 2. yield 关键字和懒加载
      • yield 工作原理
      • 实际应用:分页数据加载
    • 3. 协程(Coroutine)概念
    • 4. IAsyncEnumerable<T> 和 await foreach
      • 异步迭代接口
      • 示例:异步数据流
    • 5. 实际开发应用场景
      • 场景1:数据库大数据集处理
      • 场景2:实时数据流处理
      • 场景3:Web API 分块响应
    • 6. 性能对比和最佳实践
      • 内存使用对比
      • 最佳实践
    • 总结

概念总览

概念 描述 引入版本
IEnumerable 支持迭代的接口,定义GetEnumerator方法 .NET 2.0
yield 实现迭代器块的关键字,支持延迟执行 .NET 2.0
懒加载 延迟计算或加载数据,只在需要时执行 -
协程 能暂停和恢复执行的函数,yield return实现 .NET 2.0
IAsyncEnumerable<T> 支持异步迭代的接口 C# 8.0
await foreach 异步迭代语法,用于遍历异步序列 C# 8.0

1. IEnumerable 接口

基本概念

IEnumerable 是.NET中所有集合的基础接口,它定义了迭代的能力。

public interface IEnumerable<out T> : IEnumerable
{IEnumerator<T> GetEnumerator();
}public interface IEnumerator<out T> : IDisposable, IEnumerator
{T Current { get; }
}

示例:自定义集合

public class NumberSequence : IEnumerable<int>
{private readonly int _start;private readonly int _count;public NumberSequence(int start, int count){_start = start;_count = count;}public IEnumerator<int> GetEnumerator(){for (int i = 0; i < _count; i++){yield return _start + i;}}IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}// 使用
var numbers = new NumberSequence(10, 5);
foreach (var num in numbers)
{Console.WriteLine(num); // 输出: 10, 11, 12, 13, 14
}

2. yield 关键字和懒加载

yield 工作原理

yield 关键字将方法转换为状态机,实现延迟执行。

public static IEnumerable<int> GetEvenNumbers(int max)
{for (int i = 0; i <= max; i++){if (i % 2 == 0){yield return i; // 每次迭代返回一个值}}
}// 使用 - 延迟执行
http://www.xdnf.cn/news/20084.html

相关文章:

  • 13问详解VoLTE视频客服:菊风带你从基础到应用,厘清所有疑惑
  • 储能调峰新实践:智慧能源平台如何保障风电消纳与电网稳定?
  • 从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
  • 嵌入式第四十六天(51单片机(通信))
  • 2025年你需要了解的大型语言模型部署工具
  • 配置WSL2的Ubuntu接受外部设备访问
  • 课前准备--基因组(WGS/WES)联合单细胞获取突变信息
  • 分析KLA-Tencor公司膜厚THK产品
  • Python 算数运算练习题
  • 应对技术选型与技术债务以及架构设计与业务需求的关系
  • 概率与数理统计公式及结论汇总
  • 从策略到实效|Adobe Target 实战应用与成功案例
  • uni-app iOS 文件调试常见问题与解决方案:结合 itools、克魔、iMazing 的实战经验
  • 用spring框架实现简单的MVC业务
  • 远程协作下的项目失控:不是信任危机,而是感知缺失
  • 7种流行Prompt设计模式详解:适用场景与最佳实践
  • 快速、归并、堆、希尔、ArrayList排序
  • pyinstaller
  • SQL decode() 函数
  • Python爬虫实战:研究Axes Grid模块,构建旅游平台酒店数据采集和分析系统
  • VNC连接服务器实现远程桌面-针对官方给的链接已经失效问题
  • Linux 综合练习
  • LTE CA和NR CA的区别和联系
  • 第七章 Cesium 3D 粒子烟花效果案例解析:从原理到完整代码
  • CSS Position 属性
  • Pspice仿真电路:(三十六)变压器仿真
  • 本科论文抽检档案整理:Python批量文件查找、打包、改名
  • 【uniapp】打包为h5在保留头部标题的同时配置网站标题不跟随页面路由更新
  • CVPR 2025|无类别词汇的视觉-语言模型少样本学习
  • RikkaHub:安卓原生AI聊天新体验