代码中经常遇到迭代数据集合的情况,当希望获取到一个IEnumerable<T>类型的集合,而又不想把数据一次性加载到内存中时,

可以考虑使用yield,yield关键字可实现用户的按需获取数据,延时加载数据。

举例说明在实现同一个功能时,使用yield和不使用yield的区别:

1. 在不使用yield关键字迭代数据时代码如下:

public static IEnumerable<T> QueryExtention<T>(this MyCollection<T> source,Expression<Func<T, bool>> expression)
{IList<T> result = new List<T>();foreach (var item in source){if (expression.Compile()(item))result.Add(item);}return result;
}

2. 使用yield关键字迭代数据时代码如下:

public static IEnumerable<T> QueryExtention<T>(this MyCollection<T> source,Expression<Func<T, bool>> expression)
{foreach (var item in source){if (expression.Compile()(item))yield return item;}
}

由上面例子可以看出,在不使用yield关键字时,迭代一个数据集合将首先创建一个集合,然后迭代数据,将符合条件的数据添加

到新创建的集合中,最后迭代完毕后返回新集合;

使用yield的关键字时则不需要创建一个新的集合,并且调试代码会发现实际上面的扩展方法在执行结束后并未返回符合条件的数据

集合,而是返回了一个迭代器,在使用foreach关键字遍历迭代器时,一条一条返回符合条件的数据

转载于:https://www.cnblogs.com/zhchsh/p/9259557.html

C#语法糖yield相关推荐

  1. python with contextmanager yield 语法糖

    官方示例 https://docs.python.org/zh-cn/3.8/library/contextlib.html 说实话,没看出来有多方便.我这写了两个功能相同的程序,一个用语法糖,一个用 ...

  2. 第十三节:实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim)

    一. 监视锁(Monitor和lock) 1. Monitor类,限定线程个数的一把锁(Synchronized lock是他的语法糖),两个核心方法: Enter:锁住某个资源. Exit:退出某一 ...

  3. assert函数_悉数Python函数传参的语法糖

    TIOBE排行榜是程序开发语言的流行使用程度的有效指标,对世界范围内开发语言的走势具有重要参考意义.随着数据挖掘.机器学习和人工智能相关概念的风行,Python一举收获2018年年度语言,这也是Pyt ...

  4. Python组合数据类型:容器类型总览,(不)可变数据类型immutable、(不)可迭代对象iterable、迭代器iterator、生成器generator、语法糖

    一.组合数据类型container objects 组合数据类型container objects:能够表示多个数据的类型 集合类型:集合类型是一个元素集合,元素无序不重不变 序列类型:序列类型是一个 ...

  5. 小哥哥小姐姐,来尝尝 Async 函数这块语法糖

    编者注:众所周知,JS 最大的特性就是异步,异步提高了性能但是却给我们编写带来了一定困难,造就了令人发指的回调地狱.为了解决这个问题,一个又一个的解决方案被提出来.今天我们请来了 <JavaSc ...

  6. JavaScript 精选:哪些能提高开发效率的es6 新语法糖

    文章目录 一 ECMAScript 相关介绍 1 什么是 ECMA 2 什么是 ECMAScript 3 什么是 ECMA-262 4 谁在维护 ECMA-262 5 为什么要学习 ES6 6 ES6 ...

  7. 语法糖(Syntax Sugar)Python

    语法糖让程序更加简洁,有更高的可读性 连续比较 1 < x < 10 (x>1 and x<10) 三元表达式(结果一 if  判断条件 else 结果二) 推导表达式 推导表 ...

  8. python语法糖是什么_Python语法糖Syntactic Sugar

    语法糖(Syntactic sugar): 计算机语言中特殊的某种语法 这种语法对语言的功能并没有影响 对于程序员有更好的易用性 能够增加程序的可读性 简而言之,语法糖就是程序语言中提供[奇技淫巧]的 ...

  9. async/await原来这就是语法糖

    带大家基本了解了Promise内部的实现原理,而提到Promise,就不得不提一个东西,那就是async/await,async/await是一个很重要的语法糖,他的作用是用同步方式,执行异步操作.那 ...

最新文章

  1. 李德毅院士:探索新一代人工智能产业发展
  2. redis java根据value排序_Redis高级特性——排序
  3. 在matlab中怎么录制音频_怎么录制淘宝页面中的视频?简单方法,轻松搞定
  4. oracle视图查询数据慢,8i查询DBA_FREE_SPACE视图极慢的问题
  5. NuGet的简单使用
  6. “假冒hao123”“北大青鸟”被黑 钓鱼挂马两不误
  7. oracle日期处理完全版
  8. CMM3上的集成软件管理
  9. Python学习记录(小甲鱼C的课程)
  10. drupal html5,基于Drupal 7HTML5布局模板二次开发.doc
  11. php——三篇夯实根基第三篇
  12. SAP FICO全解析之-货币换算比率
  13. 关于360插件化框架Replugin竖屏修改为横屏解决方案
  14. android 手机 跑分榜,Android手机哪家强?安兔兔鲁大师榜单见分晓!
  15. 表单验证设计的用户体验基本原则
  16. Unity图集简介及使用
  17. Spring Boot技术栈博客企业前后端
  18. 2016张小龙微信开发公开课全文
  19. 香帅的北大金融学课笔记1 -- 金融世界观
  20. 模板类h和cpp分开写问题浅析

热门文章

  1. adk linux 64 下载,Homekit HomeKit开源ADK是HomeKit配件开发包的一个开源版本 - 下载 - 搜珍网...
  2. linux java.net.bind,False java.net.BindException:已在Jetty上使用的地...
  3. 这些标点符号你真的会输入吗
  4. 希尔排序法(插入排序的改进版本)
  5. 【git】Git 提示fatal: remote origin already exists 错误解决办法
  6. 《高阶Perl》——3.8 对象方法里的缓存
  7. 异步 JavaScript 之理解 macrotask 和 microtask(转)
  8. 线性表之顺序存储,基本操作
  9. php dir()函数的用法
  10. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q136-Q138)