C# 中 yield return 和 yield break 关键字的用法
2011-06-08 17:14 音乐让我说 阅读(3005) 评论(0) 编辑 收藏 举报今天项目中用到了 yield return ,主要是为了实现 延迟迭代的需求,所以就写了这个小的 Demo,希望对你有帮助!
代码如下:
代码如下:
using System; using System.Collections.Generic; namespace ConAppYield { class Program { static void Main(string[] args) { // Yield 的好处是 延迟遍历,只有在遍历具体的数据时才去执行对应的代码,Linq 中大量的扩展方法用到了,比如:select 等等 Console.WriteLine("==偶数年龄如下:=="); IEnumerable<int> query = Students.GetEvenNumbers(); foreach (var item in query) { Console.WriteLine(item); } Console.WriteLine("==下面用 do while 模拟 C# 中的 foreach 循环,说到底,foreach 循环只是 C# 的语法糖而已! =="); Console.WriteLine("==同时,foreach 循环也是一种设计模式,叫 迭代模式=="); IEnumerator<int> newQuery = query.GetEnumerator(); int i = 0; while(newQuery.MoveNext()) { i++; Console.WriteLine("集合中的第 "+ i +" 个数:" + newQuery.Current); } Console.ReadKey(); } } class Students { private static readonly int[] ages = new int[] { 1,2,3,4,5,6,7,8,9,10 }; public static IEnumerable<int> GetEvenNumbers() { int agesLength = ages.Length; for (int i = 0; i < agesLength; i++) { if (ages[i] % 2 == 0) { yield return ages[i]; } else { //yield break; //yield break 可以终止循环,即:只要碰到的数不是偶数,则立即终止循环 } } /* 下面的写法错误:无法在包含 catch 子句的 Try 块体中生成值 */ /* try { foreach (var item in ages) { if (item % 2 == 0) { yield return item; } } } catch (Exception) { throw; }*/ } } }
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。