.NET修仙传
修炼秘籍
.net 修炼路线图
书籍大全
C#入门后该如何进阶?如何提升自己?
读写 Excel 四种方案
书籍大全
dotnet命令大全
C# 程序集加载方法
linux 下部署.net环境
.NET WebAPI中FromRoute、FromQuery、FromBody的关键角色与用法
C# 新用法
盘点C#最有价值的10个语法糖
C#基础语法与数据类型
序列化
C# 7.0
模式匹配Pattern Matching
优秀实用的类库推荐
2024年C#优秀实用的类库推荐
依赖注入与中间件
依赖注入
查询所有已注入的服务
WebApi实现批量注入
原生依赖注入
自动依赖注入框架
优秀中间件
依赖注入
Autofac
生命周期
文档操作
PDF操作
PDF合并及生成书签目录
Excel操作
几个Excel文件合并去重分类
Excel文件之COM组件方式
操作Excel文件之NPOI
INI文件
面试宝典
WebService、WCF、WebAPI、一般处理程序
C# 线程和进程的区别
asp.net core 服务生命周期
asp.net core 的中间件都有哪些
操作系统编程
获取搜狗输入法中英文
com组件集成
执行系统命令
通过句柄嵌入exe窗体程序
windows-开机自启动
程序调用cmd命令生成WCF服务的客户端调用文件
获取电脑信息
键盘记录器
键盘改键功能
监听鼠标操作
框架揭秘
01编程初体验
中间件 Middleware
路由
配置管理
配置系统
配置管理
日志管理
Log4Net
NLog
.net core原始日志记录
日志管理
Serilog
LINQ
LINQ概讲
LINQ编程
常用方法
ORM
EF Core初始化
EF Core的实体类配置
执行原生SQL语句
EF Core
操作sqlite
操作Mysql数据库
操作LiteDB
AutoMapper高效实现对象映射
AutoMapper
AutoMapper 10个常用方法总结
缓存
Redis支持哪几种数据类型?
什么是Redis?简述它的优缺点?
Redis相比memcached有哪些优势?
认证
什么是 JWT?它是如何工作的?
.net framework jwt
.net core Jwt操作
认证管理
.Net WebApi校验Token/参数的几种方式
鉴权授权
Authorization的几种方式
基础语法
集合
1、C#中常用集合类型
yield return 简化迭代并提高代码质量
AOP
.net core AOP
操作筛选器
网络编程
TCP 连接的前世今生
HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 之间的区别
网络编程
WebApi获取客户信息
通信
HTTP通信
公共类-HttpHelper
多线程编程
十种线程方式分析
Task-筑基期
parallel-筑基
消息队列
Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
构建高性能 API 的高级技术
优秀教程网站
每日学习地址
全套教程汇总
理解ASP.NET Core
定时任务
定时器的三种使用方式
定时任务之windows任务计划程序
创建任务到Windows任务计划程序
定时任务之Quartz.Net
IHostedService启动时运行定时任务
JSON序列化反序列化工具
前辈
发布部署
应用部署
GRPC
使用GRPC多个proto文件
本文档使用 MrDoc 发布
-
+
首页
yield return 简化迭代并提高代码质量
C# 提供了各种功能,使编码更加高效和可读。其中一个特性是语句,它在简化迭代器的创建方面起着至关重要的作用。yield return # 什么是yield return yield return是 C# 中在迭代器方法上下文中使用的关键字组合。迭代器方法是一种方法,通常返回 or ,它懒惰地生成一系列值,根据请求一次生成一个元素。这在处理大型数据集或想要动态生成值时特别有用。IEnumerableIEnumerable<T> ## 示例:无yield return 考虑这样一种情况,您希望在不使用的情况下生成平方数列表:yield return ```java using System; using System.Collections.Generic; public class Program { public static void Main() { // Without yield return foreach (var square in GenerateSquaresWithoutYield(5)) { Console.WriteLine(square); } } public static IEnumerable<int> GenerateSquaresWithoutYield(int count) { List<int> squares = new List<int>(); for (int i = 1; i <= count; i++) { squares.Add(i * i); } return squares; } } ``` > 将生成整个平方数列表并将其存储在内存中,然后返回。在处理大型数据集时,这种方法可能效率低下。 ## 示例:使用yield return 现在,让我们看看如何使用以下方法更有效地完成相同的任务:yield return ```java using System; using System.Collections.Generic; public class Program { public static void Main() { // Using yield return foreach (var square in GenerateSquaresWithYield(5)) { Console.WriteLine(square); } } public static IEnumerable<int> GenerateSquaresWithYield(int count) { for (int i = 1; i <= count; i++) { yield return i * i; } } } ``` >在此示例中,该语句用于一次生成一个平方数。该方法的状态在两次调用之间保留,并且值是动态生成的。 # yield return优势 **1. 内存效率** 使用允许我们创建迭代器,而无需一次生成整个序列并将其存储在内存中。值是动态生成的,可减少内存消耗并提高性能,尤其是在处理大型数据集时。yield return **2. 懒惰评估** 该语句启用延迟计算,这意味着仅在需要时才计算值。这在处理无限序列或生成值的成本很高时非常有用。yield return **3. 可读且可维护的代码** 使用迭代器方法通常会导致代码更清晰、更易读。用于生成序列的逻辑封装在方法中,使代码更易于理解. # yield return的用例 ## 无限序列 一个有用的应用是生成无限序列。如果没有 ,创建无限序列将需要分配无限量的内存,这显然是不切实际的。使用 ,您可以即时生成值,而不会消耗过多内存。 ```java using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { // Infinite sequence var infiniteSequence = GenerateInfiniteSequence().Take(10); Console.WriteLine($"First 10 elements of infinite sequence: {string.Join(", ", infiniteSequence)}"); } public static IEnumerable<int> GenerateInfiniteSequence() { int i = 1; while (true) { yield return i++; } } } ``` > 在此代码中,生成一个无限的递增整数序列,只要请求这些值,该方法就会继续生成值。 ## 过滤和转换 yield return当您需要过滤或转换序列中的元素时,这也是有益的。让我们考虑一个例子,我们只想生成偶数平方: ```java using System; using System.Collections.Generic; public class Program { public static void Main() { // Filtering even squares foreach (var evenSquare in GenerateEvenSquares(5)) { Console.WriteLine(evenSquare); } } public static IEnumerable<int> GenerateEvenSquares(int count) { for (int i = 1; i <= count; i++) { int square = i * i; if (square % 2 == 0) { yield return square; } } } } ``` >在此示例中,序列中仅包含偶数的平方,并且该语句可确保延迟生成这些值。 # 总结 yield return是 C# 中的一项有用功能,它简化了迭代器的创建,提供了一种更高效、更易读的方式来生成值序列。通过使用 ,您可以编写既节省内存又易于理解的代码,使其成为 C# 开发人员工具包中的宝贵工具。无论是处理大型数据集、创建无限序列,还是对元素应用过滤器,都能提供灵活高效的解决方案。 https://mp.weixin.qq.com/s/IxHpdGcxOZfTKNtVj5Fs3g
孙端己
2024年8月9日 14:14
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码