C#中yield return用法分析
来源:互联网 发布:.cn溢价域名续费价格 编辑:程序博客网 时间:2024/06/03 23:00
本文实例讲述了C#中yield return用法,并且对比了使用yield return与不使用yield return的情况,以便读者更好的进行理解。具体如下:
yield关键字用于遍历循环中,yield return用于返回IEnumerable<T>,yield break用于终止循环遍历。
有这样的一个int类型的集合:
staticList<int> GetInitialData(){ returnnew List<int>(){1,2,3,4};}
需要打印出所有值大于2的元素。
不使用yield return的实现
staticIEnumerable<int> FilterWithoutYield(){ List<int> result = newList<int>(); foreach(inti inGetInitialData()) { if(i > 2) { result.Add(i); } } returnresult;}
客户端调用:
staticvoid Main(string[] args){ foreach(var item inFilterWithoutYield()) { Console.WriteLine(item); } Console.ReadKey();}
输出结果:3,4
使用yeild return实现
staticIEnumerable<int> FilterWithYield(){ foreach(inti inGetInitialData()) { if(i > 2) { yieldreturn i; } } yieldbreak; Console.WriteLine("这里的代码不执行");}
客户端调用:
staticvoid Main(string[] args){ foreach(var item inFilterWithYield()) { Console.WriteLine(item); } Console.ReadKey();}
输出结果:3,4
总结:
通过单步调试发现:
虽然2种方法的输出结果是一样的,但运作过程迥然不同。第一种方法,是把结果集全部加载到内存中再遍历;第二种方法,客户端每调用一次,yield return就返回一个值给客户端,是"按需供给"。
第一种方法,客户端调用过程大致为:
使用yield return,客户端调用过程大致为:
使用yield return为什么能保证每次循环遍历的时候从前一次停止的地方开始执行呢?
--因为,编译器会生成一个状态机来维护迭代器的状态。
简单地说,当希望获取一个IEnumerable<T>类型的集合,而不想把数据一次性加载到内存,就可以考虑使用yield return实现"按需供给"。
0 0
- C#中yield return用法分析
- C#中yield return用法分析
- C#中yield return用法分析
- C#中yield return用法分析
- C#中yield return用法分析
- C#中yield return用法分析
- C# yield return用法分析
- C# 中 yield return 和 yield break 关键字的用法
- C# 中 yield return 和 yield break 关键字的用法
- C#中 yield return 与 yield break
- C#中 yield return 与 yield break
- C#中 yield return 与 yield break
- C#编程中yield return
- C# yield return 用法与解析
- C#中yield用法
- C#中yield用法
- yield return用法
- C#中的yield return
- Java序列化(Serializable)与反序列化
- ZCMU-巴什博弈
- HTTP学习笔记:Web与网络基础
- 关于Python的 求解答Bunch Pattern
- 1003. Emergency 解析
- C#中yield return用法分析
- windows 一些冷知识
- 面向对象的过程
- 写在前面的话
- SSM框架简单介绍以及maven环境搭建
- 百度语音REST接口使用(python)
- 9、开链法解决散列表碰撞问题
- 十八大编程法则提升程序员效率
- leetcode_326(3的次方判断)