4.1 迭代器块 
一个迭代器块(iterator block)是一个能够产生有序的值序列的块。迭代器块和普通语句块的区别就是其中出现的一个或多个yield语句。 yield return语句产生迭代的下一个值。
yield break语句表示迭代完成。
只要相应的函数成员的返回值类型是一个枚举器接口或是一个可枚举接口,一个迭代器块就可以用作方法体、运算符体或访问器体。 

迭代器块并不是C#语法中的独立元素。它们受多种因素的制约,并且对函数成员声明的语义有很大影响,但在语法上它们只是块(block)。 

当一个函数成员用一个迭代器块来实现时,如果函数成员的形式参数列表指定了ref或out参数,则会引起编译错误。 

如果在迭代器块中出现了return语句,则会因此编译错误(但yield return语句是允许的)。 

如果迭代器块包含不安全上下文,则会引起编译错误。一个迭代器块必须定义在一个安全的上下文中,即使它的声明嵌套在一个不安全上下文中。 
在下面的示例中,迭代器块(这里是方法 Power(int number, int power))中使用了 yield 语句。
当调用 Power 方法时,它返回一个包含数字幂的可枚举对象。注意 Power 方法的返回类型是 IEnumerable(一种迭代器接口类型)。
using System;
using System.Collections;
public class List
{
public static IEnumerable Power(int number, int exponent)
{
int counter = 0;
int result = 1;
while (counter++ < exponent)
{
result = result * number;
yield return result;
}
} static void Main()
{
// Display powers of 2 up to the exponent 8:
foreach (int i in Power(2, 8))
{
Console.Write("{0} ", i);
}
}
}

最新文章

  1. HashSet HashTable HashMap的区别
  2. oracle 循环语句
  3. C#获取网页中的验证码图片(转载)
  4. Birt时间参数添加My97日历控件
  5. android学习日记13--数据存储之SharedPreference
  6. Ubuntu系统下为IDEA创建启动图标
  7. Openjudge-计算概论(A)-鸡尾酒疗法
  8. ThreadLocal源码分析:(三)remove()方法
  9. json转化为对象数组
  10. PMP知识点(三)——挣值计算汇总表
  11. 网络编程 单纯UDP通信
  12. JSON库的使用研究(一)
  13. JAR(Spring Boot)应用的后台运行配置
  14. 如何自学web安全(详细路径)
  15. Beta冲刺——day7
  16. io编程,bio,nio,aio
  17. ASIHTTPRequest-断点续传需要原网站支持!
  18. HTML5 canvas画图
  19. 《Spring2之站立会议9》
  20. 第2本MATLAB书

热门文章

  1. 关联数据和formatter问题-easyui+微型持久化工具
  2. 第一百五十一节,封装库--JavaScript,表单验证--密码确认验证--回答验证--电子邮件验证加自动补全
  3. Material design之Compatibility(适配)
  4. hdu 2167(状压dp)
  5. poj 1815(最小割、割集)
  6. server r2 系统更新文件清理
  7. mysql5.7 安装版安装
  8. 170306、wamp中的Apache开启gzip压缩提高网站的响应速度
  9. module使用
  10. Python高级教程-迭代