C# 迭代器 特点小议

 C#2.0引入了yield return 这是一种列举方案 C#2.0推广了迭代器,使其更具灵活性;

 

例如:

 

public class A

{

    public IEnumerable<string> GetData()

    {

         yield return "a";

         yield return "b";

         yield return "c";

    }

    public void Test()

   {

        foreach(var item in this.GetData()) //C

        {

              Console.WriteLine(item);

        }//A

        Console.ReadLine(); //B

   }

 

 

  这里要特别指出有这么几个关键的地方

//C行中 'in'关键字;

//A foreach语句的结束语句;

//B foreach语句的下一个语句;

 

对于上面示例代码中 A类的GetData()方法来说,它就是一个"迭代器",我们可以象对待一个数组一样

来对待它,或者说它的表现就象一个数组那样;

 

仔细观察上述代码的分步执行可以发现,yield return 语句返回到in关键字,然后赋值给foreach临时

变量item,接着执行foreach语句块,完成foreach语句块以后,到达//A位置,这就是foreach语句的结束

从这里,将再次返回,再次从in进入到迭代器函数中返回yield return的下一语句,例如在上述示例中,如果

从//A返回进入迭代器函数中时它有可能出现位置可能为 yield return "b"; 或 yield return "c";

或GetData()函数的结尾,具体会是那一句取决于,返回之前的迭代器调用的那个yield return 语句的位置;

这样就将两个函数通过这种方式联合起来了,yield return规则使得函数不必执行完毕就可以跳转这使这种

特殊的函数看上去象一个可以象数组那样遍历的对象,并且完全也确实可以象数组那样来使用;这也是迭代器函数与普通函数之间的重要差异,普通函数在同一线程内是顺序执行的,这就是说,当一个方法返回时那么必然是这个方法执行完毕以后的事情(单线程)而迭代器函数却是在遇到yield return语句时就可返回了,而yield return语句不必处于多线程,不必是该函数的最后一句,其后还可以有任意语句; 最后需求强调的一点是,在迭代过程中,in关键字的特点,调试中可以发现它

充当了一个醒目角色,实际上它是一个迭代器进出的出入口,不论是进入对foreach局部变量的赋值,还是

执行完毕时将要达到foreach的下一个语句之前,都将要经过in语句这一点;它成为了连接迭代器(例如迭代器函数)和调用函数

之间的桥梁;

 

C#迭代器的使用是建立在NET编译器之上的,NET编译器为此隐蔽的封装了一些相关临时对象,以帮助状态记录等,有了C#迭代器后,程序员的相关工作会大大的节省下来,迭代器的应用需求也是开发中一种基本的要求,所以C#迭代器是一个相当重要的进步,值得认真学习和理解;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值