yield语句的两种形式:
yield return <expression>; yield break;
- 使用一个yield return语句返回集合的一个元素
- 包含yield语句的方法或属性是迭代器。迭代器必须满足以下要求
a. 返回类型必须是IEnumerable、IEnumerable<T>、IEnumerator或 IEnumerator<T>。
b. 它不能有任何ref或out参数
- yield关键字会告诉编译器当前的函数是在一个循环内部,编译器会相应生成一个执行它在循环体内部所表示行为的类。
- yield和return关键字一起用于为枚举器对象提供返回值,比如说:在foreach内部的每一次循环内,yield关键字用于终止当前循环。
- 当希望获取一个IEnumerable<T>类型的集合,而不想把数据一次性加载到内存,就可以考虑使用yield return实现"按需供给"。
class Program
{
public static IEnumerable Power(int number, int exponent)
{
int counter = 0;
int result = 1;
while (counter++ < exponent)
{
result = result * number;
//return result;
yield return result;
}
}
static void Main(string[] args)
{
//int count = 1;
foreach (int i in Power(2, 8))
{
//count=count+1;
Console.Write("{0} ", i);
}
}
}
输出结果是:2 4 8 16 32 64 128 256
添加上注释部分更容易理解yield的原理
http://www.cnblogs.com/LilianChen/archive/2013/03/08/2949783.html
http://www.cnblogs.com/CareySon/archive/2009/12/15/1624728.html
http://www.jb51.net/article/54810.htm