C#关键字:yield
yield是C#为了简化遍历操作实现的语法糖。在语句中使用 yield 关键字,表示在该关键字所在的方法、运算符或 get 访问器是迭代器。有两种形式:
yield return <expression>; yield break;
这个还是看个实例更清楚:
static void Main(string[] args) { foreach (int i in Power(2, 8)) { Console.Write("{0} ", i); } // Output: 2 4 8 16 32 64 128 256 Console.ReadKey(); } public static System.Collections.IEnumerable Power(int number, int exponent) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; yield return result; } }
此处,使用了 yield return 返回每一个元素节点。使用 foreach 语句或 LINQ 查询,则使用迭代器方法。 foreach 循环的每次迭代调用迭代器方法。 当 yield return 语句在迭代器方法时为止,expression 返回,并且,代码的当前位置保留。 当下次调用迭代器函数时执行从该位置重新启动。通过调试,我们可以看到代码的执行顺序大致如下:
这个图中标记的顺序可能有点抽象,不知道大家能不能理解?~~~
除此之外还有 yield break , 其表示结束迭代,跳出循环。不理解,看实例:
static void Main(string[] args) { foreach (int i in Power(2, 8)) { Console.Write("{0} ", i); } // Output: 2 4 8 16 Console.ReadKey(); } public static System.Collections.IEnumerable Power(int number, int exponent) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; if (i == 4) yield break; yield return result; } }
参考文档
博客地址: | https://www.cnblogs.com/CCHUncle/ |
博客版权: | 本文以学习、研究和分享为主,欢迎转载!但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方,还望纠正!如果觉得本文对你有所帮助,请【推荐】一下! 如果你有更好的建议和想法,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。 |