public GameMoves()
        {
          
            cross = Cross();为什么这里没执行输出TEST这行呢!

解决方案 »

  1.   

    这是编译器为我们生成的代码
    var 变量 = 获取迭代器() 的时候并不会调用到图里这个方法
    之后用foreach使用迭代器时,才会输出“Test”
      

  2.   

    你没有办法在C#语法的层面模拟yield。
    4L的代码也是不可能编译的。因为C#不允许你从循环外面向循环里面跳转。
      

  3.   

    又看了李董的文章我更明白了,以下是他总结内容
    图中只出现了两个Test,那是因为第一次 IEnumerator enumerator = game.Cross();创建的时候,调用MoveNext运行一次,接着当运行到第二次的Cross的时候运行一次,是因为IEnumerator enumerator = game.Cross();和yield return cross两个对象不是同一个,而之后的cross是一样的所以接着前面的cross继续循环下去(在while里面执行),不会从Cross函数开始处执行,导致接下去的输出不会有Test