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

广州网络营销公司有哪些上海专业的seo公司

广州网络营销公司有哪些,上海专业的seo公司,页面设计的简短概念,做ic哪些网站好做C# --- yield关键字 和 Lazy Execution 延迟执行(Lazy Execution)yield关键字lazy execution与yield的关系LINQ 和 lazy exectuion 延迟执行(Lazy Execution) 延迟执行指操作不会立即计算结果,而是在实际需要数据时才执…

C# --- yield关键字 和 Lazy Execution

  • 延迟执行(Lazy Execution)
  • yield关键字
  • lazy execution与yield的关系
  • LINQ 和 lazy exectuion

延迟执行(Lazy Execution)

  • 延迟执行指操作不会立即计算结果,而是在实际需要数据时才执行计算。这种方式避免一次性加载所有数据,节省内存并提升性能。
  • 典型应用:LINQ查询、foreach迭代。
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var query = numbers.Where(n => {Console.WriteLine($"过滤 {n}"); // 副作用代码,用于观察执行时机return n % 2 == 0;
});Console.WriteLine("查询已定义,但尚未执行过滤");
foreach (var num in query) // 实际执行过滤操作
{Console.WriteLine($"结果: {num}");
}output:
查询已定义,但尚未执行过滤
过滤 1
过滤 2
结果: 2
过滤 3
过滤 4
结果: 4
过滤 5
  • Where方法返回的是IEnumerable<T>,但此时不会执行过滤逻辑。
  • 实际过滤发生在foreach遍历时,逐个元素处理
  • lazy execution的实现原理用到了yield关键字

yield关键字

  • 简化迭代器实现:通过yield return按需生成值,自动生成IEnumerable或IEnumerator。
  • 启用延迟执行:迭代器方法在遍历时逐步执行,而非一次性运行完毕。
  • yield return:生成一个值,并暂停方法执行,直到下次迭代。
  • yield break:终止迭代。

示例:生成斐波那契数列

using System;
using System.Collections.Generic;public class Program
{public static IEnumerable<int> GenerateFibonacci(int count){int a = 0, b = 1;for (int i = 0; i < count; i++){Console.WriteLine($"生成第 {i+1} 项");yield return a; // 暂停并返回值int temp = a;a = b;b = temp + b;}}public static void Main(){var fibSequence = GenerateFibonacci(5); // 此时不会执行方法体, 只返回迭代器Console.WriteLine("开始遍历");foreach (var num in fibSequence) {// 每次循环触发一次迭代,执行方法体里的代码Console.WriteLine($"结果: {num}");}}
}output:
开始遍历
生成第 1 项
结果: 0
生成第 2 项
结果: 1
生成第 3 项
结果: 1
生成第 4 项
结果: 2
生成第 5 项
结果: 3
  • 调用GenerateFibonacci(5)时,方法体不会立即执行。
  • 每次foreach循环触发一次迭代,执行到下一个yield return后暂停

lazy execution与yield的关系

核心机制

  • yield关键字生成的迭代器方法会自动实现延迟执行。
  • 迭代器方法被调用时,返回一个IEnumerable对象,但方法体代码不会立即运行
  • 代码的实际执行由foreach或MoveNext()触发,按需生成值

立即执行(Eager Evaluation)

public List<int> GetNumbersEager()
{List<int> numbers = new List<int>();for (int i = 0; i < 5; i++){Console.WriteLine($"立即生成: {i}");numbers.Add(i);}return numbers; // 所有数据已生成
}// 调用时立即生成所有元素:
var list = GetNumbersEager(); // 输出所有"立即生成: x"
foreach (var num in list) { /* 直接遍历已生成的列表 */ }

延迟执行(使用yield)

public IEnumerable<int> GetNumbersLazy()
{for (int i = 0; i < 5; i++){Console.WriteLine($"延迟生成: {i}");yield return i; // 按需生成}
}// 调用时仅定义迭代器:
var sequence = GetNumbersLazy(); // 无输出
foreach (var num in sequence) 
{// 每次循环触发一次生成
}延迟生成: 0
延迟生成: 1
延迟生成: 2
...

何时选择延迟执行?

  • 处理大数据集:避免一次性加载所有数据到内存。
  • 生成无限序列:如斐波那契数列、实时数据流。
  • 复杂计算:按需计算,减少不必要的开销。

经典案例

// 生成无限随机数序列
public static IEnumerable<int> InfiniteRandomNumbers()
{Random rand = new Random();while (true){yield return rand.Next();}
}// 仅取前3个随机数
foreach (var num in InfiniteRandomNumbers().Take(3))
{Console.WriteLine(num);
}

LINQ 和 lazy exectuion

  • 在 C# 中,延迟执行(Lazy Execution) 是 LINQ(Language Integrated Query)的核心特性之一。它允许 LINQ 查询在定义时不立即执行,而是推迟到实际需要数据时才进行计算。这种机制显著优化了性能,尤其是在处理大数据集或链式操作时。
  • 延迟执行:LINQ 查询(如 Where、Select、OrderBy)默认返回 IEnumerable 或 IQueryable,这些查询不会立即执行,而是在以下时机触发计算:
  • 遍历结果(如 foreach 循环)。
  • 调用强制立即执行的方法(如 ToList()、ToArray()、Count())。
  • 底层实现:LINQ 方法通过 yield return 和迭代器模式实现延迟执行,按需生成数据
var numbers = new List<int> { 1, 2, 3, 4, 5 };// 定义查询(未执行)
var query = numbers.Where(n => {Console.WriteLine($"过滤 {n}");return n % 2 == 0;}).Select(n => {Console.WriteLine($"映射 {n}");return n * 10;});Console.WriteLine("查询已定义,尚未执行");
numbers.Add(6); // 修改原集合// 触发执行
foreach (var num in query)
{Console.WriteLine($"结果: {num}");
}查询已定义,尚未执行
过滤 1
过滤 2
映射 2
结果: 20
过滤 3
过滤 4
映射 4
结果: 40
过滤 5
过滤 6
映射 6
结果: 60
http://www.dtcms.com/wzjs/376590.html

相关文章:

  • 海口网站建设加王道下拉中文搜索引擎有哪些
  • 国外专门做图像增强的网站今日新闻最新
  • 厦门b2b网站建设长沙seo优化排名
  • 自己电脑怎么做网站服务器吗网页设计制作网站素材
  • 做网站价位seo排名优化公司哪家好
  • 做调味品批发上哪个网站好seo免费培训
  • css网页设计用什么软件厦门seo排名收费
  • 东莞常平招聘网最新招聘信息seo排名优化工具推荐
  • 好搜360网站打开百度浏览器
  • 青岛手机网站制作网络优化工程师证书
  • 苏州园区两学一做网站seo案例视频教程
  • 网站建设与管理上海交通大学知道百度
  • 上饶网站建设3ao cc专业a今日最火的新闻
  • 融资网站建设重点seo公司 引擎
  • 西安装修行业网站建设搜索引擎优化的主要内容
  • 有哪些做特卖的网站seo培训网的优点是
  • 政务网站建设办法seo综合检测
  • web3d游戏网站开发免费seo软件推荐
  • 网站不备案可以做微信小程序么百度经验手机版
  • 6731官方网站下载免费找客源软件
  • vi视觉识别系统设计百度快速优化排名软件
  • 网站受到攻击 怎么做攻击的如何建立网站服务器
  • 做网站诈钱萧山seo
  • 微信公众号小程序怎么发布青岛seo博客
  • 内网做网站舆情监测软件
  • 南海最新军事seo内链优化
  • 兰州商城网站建设山西seo和网络推广
  • 天津网站页面设计crm系统
  • 中山外贸网站建设公司河南纯手工seo
  • 广州网站建设开顶柜关键词