陌生的yield关键字


yield关键字有什么功能,估计大部分人都跟我先前一样一头雾水。我对他产生关注是在做一份面试题之后。

我查了一下Msdn关于yield 的描述:在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。

还是一头雾水吧。我来说一下我的理解吧,yield在循环体中出现,在每次循环返回当次运算结果;yield是跟return或者break连用,充当方法输出的标记。

yield return和return的区别:

 

例如:

 

int n=1;

int m=100;

while(n<100)

{

    n+=n;

    yield return n;//result 2,4,8,......

}

 

return是整个方法执行终止,并且返回当前结果。

yield return是当次循环介绍,返回当次结果,并开始下一次循环。

 

使用yield关键字的方法的返回值一般为IEnumerable。

Msdn yield示例代码的的执行过程。

在下面的示例中,迭代器块(这里是方法 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;                             //<---------------(2)
        while (counter++ < exponent)      //<---------------(3)
        {
            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))       //<-----------------(1)
        {
            Console.Write("{0} ", i);        //<-----------------(4)
        }
    }
}

 

返回的结果:2 4 8 16 32 64 128 256。

 

首先程序执行到(1),跳到Power方法执行至(2),首次进入(3),返回结果至(4)输出,(1)的下一个循环开始直接从(3)开始,返回结果(4)结束。

posted @ 2010-01-26 11:18  王伟晔  阅读(687)  评论(5编辑  收藏  举报