• 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行,循环下去

     
  • 相关阅读:
    苏宁易购积分规则
    购物车的实现原理
    <mvc:annotation-driven />讲解
    c3p0、dbcp和proxool比较
    Spring的事务到底该给Dao配置还是给Service配置?
    Spring PropertyPlaceholderConfigurer占位符用法
    Spring <context:annotation-config />讲解
    DispatcherServlet讲解
    Spring3.1新特性
    Spring MVC入门
  • 原文地址:https://www.cnblogs.com/workharder/p/14949083.html
Copyright © 2020-2023  润新知