Lazy Execution延迟执行(本质);IEnumerable以及IEnumerator区别;yield return

提示:有待后续持续更新


前言

提示:这里可以添加本文要记录的大概内容:

例如:


一、一个简单的迭代器产生整数

static IEnumerable<int> CreatSimpleIterator()
{
   yield return 10;
   for (int i = 0; i < 3; i++)
   {
       yield return i;
   }
   yield return 20;
}

// 延迟执行 这个写在main中
            foreach (int value in CreatSimpleIterator())
            {
                Console.WriteLine(value);
            }

二、foreach循环就相当于执行了下面这些语句

IEnumerable<int> enumerable = CreatSimpleIterator();  // IEnumerable相当于一本书
using (IEnumerator<int> enumerator=enumerable.GetEnumerator()) // IEnumberator相当于书签 括号里面调用这本书的GetEnumerator()方法相当于把一个新的书签放到了这本书的开头,接下来,只要改变书签的位置就可以获取到数的内容
{
    // 当到达end of the method或者yield break语句时,MoveNext()方法返回false,停止执行
    // 当MoveNext()方法返回true,意味着你已经移动到下一个值并且你可以access这个Current属性
    while (enumerator.MoveNext()) // 例子中为yield return语句,当执行到yield return语句,MoveNext()方法返回true,并且Current获取到的属性值为yield return后面的值,然后输出
    {
         int value = enumerator.Current;
         Console.WriteLine(value);
    }
}


三、当执行了一个yield return语句后,接下来该如何执行呢?

The generated code keeps track of the point you’va reached in the method along with any other state,这就和循环中的一个局部属性i一样。When MoveNext() is called again,execution picks up from the point you’ve reached and keeps going.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值