zoukankan      html  css  js  c++  java
  • yield return 1

    yield return 数字,并不是代表多少帧之后执行。

    yield return的作用是在执行到这行代码之后,将控制权立即交还给外部。yield return之后的代码会在外部代码再次调用MoveNext时才会执行,直到下一个yield return——或是迭代结束。

    foreach每次遍历用的 MoveNext(请结合下边代码,看完回答问题,都正确了,说明真的理解了)

     1 using System;
     2 using System.Collections.Generic;
     3 
     4 namespace StudyCSharp
     5 {
     6     class Program
     7     {
     8         public static IEnumerable<int> GenerateFibonacci()
     9         {
    10             Console.WriteLine("1111");
    11             yield return 0;
    12             Console.WriteLine("2222");
    13             yield return 1;
    14             int last0 = 0, last1 = 1, current;
    15             while (true)
    16             {
    17                 current = last0 + last1;
    18                 yield return current;
    19                 last0 = last1;
    20                 last1 = current;
    21             }
    22         }
    23         static void Main(string[] args)
    24         {
    25             var temp = GenerateFibonacci();
    26             int nCnt = 0;
    27             foreach (var item in temp)
    28             {
    29                 nCnt += item;
    30             }
    31             Console.WriteLine(nCnt);
    32             Console.WriteLine("Hello World!");
    33         }
    34     }
    35 }

    问题:

    1.是死循环吗

    2.打印是什么

    3.执行顺序是什么?

    答案:

    前两个不说了,运行下就知道。第三个,执行25行时,并没有进入函数,控制权交给外部,当调用foreach时,由于内部是MoveNext,执行了10、11行,之后的代码会在外部代码再次调用MoveNext时才会执行,所以,继续执行29行,12、13行、29行、14-18行、29行、19、20、17、18行、29行,循环下去

     
  • 相关阅读:
    SQL SERVER 2008的数据压缩
    protected,internal和protected internal
    CSS笔记
    太吓人了!妈妈必看:国内人贩子抢孩子竟使出狠招
    ASP.NET上传图片的简单方法
    VS2005快捷键大全
    判断ExecuteScalar()是否返回结果
    AppSettings和ConnectionStrings的区别
    VSS中的签入和签出
    对目前工作烦躁的人来看看,你真正明白多少
  • 原文地址:https://www.cnblogs.com/workharder/p/14949083.html
Copyright © 2011-2022 走看看