C#迭代器,枚举器

来源:互联网 发布:淘宝李白凤求凰可信吗 编辑:程序博客网 时间:2024/04/30 00:07

测试代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;


namespace _07迭代器
{
    class GameMoves
    {
        private IEnumerator cross;
        private IEnumerator circle;
        
        public GameMoves() {
            cross = Cross();
            circle = Circle();
        }


        private int move = 0;
        const int MaxMoves = 9;
        public IEnumerator Cross() {
            while (true)
            {
                Console.WriteLine("Cross,move {0}", move);
                if (++move >= MaxMoves)
                {
                    yield break;
                }
                yield return circle;
            }
        }


        public IEnumerator Circle()
        {
            while (true)
            {
                Console.WriteLine("Circle,move {0}", move);
                if (++move >= MaxMoves)
                {
                    yield break;
                }
                yield return cross;
            }
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            var game = new GameMoves();
            IEnumerator enumerator = game.Cross();
            while (enumerator.MoveNext())
            {
                enumerator = enumerator.Current as IEnumerator;
            }
            Console.ReadKey();
        }
    }
}


yield return 每次返回一个枚举器,包含yield的方法或属性叫做迭代快,使用迭代快,编译器会生成一个yield类型,MoveNext()方法封装了迭代块中的代码

Current属性返回yield return 中返回的内容。这就是迭代器执行的顺序。