C# Yield
2016-01-15 09:58
639 查看
一.测试代码
关于Yield使用,先来直接上测试代码,看不同之处。static void Main(string[] args) { var test1 = GetResult(); Console.WriteLine("未用yield"); foreach (var i in test1) { Console.WriteLine(i); } Console.WriteLine("**********************************"); Console.WriteLine("使用yieldReturen"); var test2 = GetResultByYield(); foreach (var i in test2) { Console.WriteLine(i); } Console.WriteLine("**********************************"); Console.WriteLine("使用yieldBreak"); var test3 = GetResultByYieldBreak(); foreach (var i in test3) { Console.WriteLine(i); } Console.ReadKey(); } public static IEnumerable<int> GetResult() { var strs = new List<int>(); for (int i = 0; i < 10; i++) { strs.Add(i); } return strs; } public static IEnumerable<int> GetResultByYield() { for (int i = 0; i < 10; i++) { yield return i; } } public static IEnumerable<int> GetResultByYieldBreak() { for (int i = 0; i < 10; i++) { if (i < 8) { yield return i; } else { yield break; } } }
二、测试结果
下面再来看执行结果。三、官方帮助文档
官方帮助文档地址:https://msdn.microsoft.com/library/9k7k7cf0(v=vs.110).aspx
四、注意点
从代码中可以看到,未用Yield方法中,返回结果是返回的的一个List<int>,就是说,需要先声明泛型类来保存遍历出来 的结果。
GetResultByYield方法以及GetResultByYieldBreak都没有声明额外 的泛型类,而是直接以yield return来返回的结果,使用yield方法的好处是,执行方法会从上次执行的地方向下继续 执行,当所有结果执行完成后,再返回总的结果。
yield break则是彻底中断执行,返回已经拿到部分或者是全部结果。
使用一个 yield return 语句返回每个元素一个节点。
使用 foreach 语句或 LINQ 查询,则使用迭代器方法。 foreach 循环的每次迭代调用迭代器方法。 当 yield
return 语句在迭代器方法时为止,expression 返回,并且,代码的当前位置保留。 当下次调用迭代器函数时执行从该位置重新启动。
可以使用 yield break 语句结束迭代。
yield return 语句不能位于 try-catch 块。 yield return 语句可以位于在尝试 try-finally 块语句。
yield break 语句可以位于 try 块或 catch 块,但不能位于 finally 块。
如果 foreach 主体 (在迭代器方法的外部) 引发异常,finally 在迭代器方法执行块。
五、互助交流
欢迎加入.net技术交流群![](http://pub.idqqimg.com/wpa/images/group.png)
相关文章推荐
- C#常用正则表达式
- clickonce 不能安装
- C#中DataGridView控件使用大全
- C#中国象棋代码-棋子移动类
- C#串口通信
- c#初学-多线程中lock用法的经典实例
- c#程序 获取类的属性和方法
- C#应用范围
- C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别
- C# XML 文档注释
- C#单例模式的三种写法
- C# 应用程序配置文件操作
- c# DateTime 时间
- C# winform版 nbtstat
- C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)
- 如何在C#中获得input文本框中的值
- C#基础知识(以宝马,车,车轮为例)
- pp看书笔记---C#高级编程第九版 第七章 【运算符和类型强制转换】
- C# 基础 学习 之 数据类型
- 【转】(C#)OPC客户端源码