using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;namespace Wrox.ProCSharp.Arrays
{
    public class GameMoves
    {
        private IEnumerator cross;
        private IEnumerator circle;        public GameMoves()
        {
            cross = Cross();
            circle = Circle();
            Console.WriteLine("Circle, move {0}",cross);
        }        private int move = 0;        public IEnumerator Cross()
        {
            while (true)
            {
                Console.WriteLine("Cross, move {0}", move);
                move++;
                if (move > 8)
                    yield break;
                yield return circle; 
            }
        }        public IEnumerator Circle()
        {
            while (true)
            {
                Console.WriteLine("Circle, move {0}", move);
                move++;
                if (move > 8)
                    yield break;
                yield return cross; 
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;namespace Wrox.ProCSharp.Arrays
{
    class Program
    {
        static void Main()
        {
            GameMoves g = new GameMoves();
            IEnumerator enumerator = g.Cross();
            while (enumerator.MoveNext())
            {
              enumerator = (IEnumerator)enumerator.Current;
            }
        }
    }
}让我很郁闷的是cross = Cross();
            circle = Circle();这两句,为什么cross、circle不是存储Cross()、Circle()的返回值而是存储方法;小弟我目前知识有限,请各位大神以比较通俗的话帮我解答一下,小弟我感激不尽啊

解决方案 »

  1.   

    存储的是返回值而不是方法。你的理解没错,不必困惑。这个返回值是实现了IEnumerator接口的一个类的一个实例对象。这个类的代码是编译器生成的。
      

  2.   

    没错啊,因为你写的就是把方法压入进去的语句啊yield return circle; 
      

  3.   

    如果是返回值,那为什么输出时从0开始;
    下面是结果:
    Cross, move 0
    Circle, move 1
    Cross, move 2
    Circle, move 3
    Cross, move 4
    Circle, move 5
    Cross, move 6
    Circle, move 7
    Cross, move 8