IENumerable_Test

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

namespace IENumerable_Test
{

    public class Person
    {
        public string firstName;
        public string lastName;

        public Person(string fName, string lName)
        {
            this.firstName = fName;
            this.lastName = lName;
        }
    }

    public class People : IEnumerable
    {
        private Person[] _people;

        public People(Person[] pArray)
        {
            this._people = pArray;
            //_people = new Person[pArray.Length];

            //for (int i = 0; i < pArray.Length; i++)
            //{
            //    _people[i] = pArray[i];
            //}
        }

        // Implementation for the GetEnumerator method.
        IEnumerator IEnumerable.GetEnumerator()
        {
            return (IEnumerator)GetEnumerator();
        }
        //IEnumerator IEnumerable.GetEnumerator()
        //      {
        //          throw new NotImplementedException();
        //      }

        public PeopleEnum GetEnumerator()
        {
            return new PeopleEnum(_people);
        }
    }

    public class PeopleEnum : IEnumerator
    {
        public Person[] _people;

        // Enumerators are positioned before the first element
        // until the first MoveNext() call.
        int position = -1;

        public PeopleEnum(Person[] list)
        {
            this._people = list;
        }

        public bool MoveNext()
        {
            position++;
            return (position < _people.Length);
        }

        public void Reset()
        {
            position = -1;
        }

        object IEnumerator.Current
        {
            get
            {
                return Current;
            }
        }

        public Person Current
        {
            get
            {
                try
                {
                    return _people[position];
                }
                catch (IndexOutOfRangeException)
                {
                    throw new InvalidOperationException();
                }
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person[] peopleArray = { new Person("John", "Smith"), new Person("Jim", "Johnson"), new Person("Sue", "Rabon") };

            People peopleList = new People(peopleArray);
            foreach (Person p in peopleList)
                Console.WriteLine(p.firstName + " " + p.lastName);
            Console.ReadKey();
        }
    }
}

  

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

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("*********Fun with IEnumberable/IEnumerator************\n");
            Garage carLot = new Garage();

            //交出集合中的每一Car对象吗  
            foreach (Car c in carLot)
            {
                Console.WriteLine("{0} is going {1} MPH", c.Name, c.Speed);
            }

            Console.WriteLine("GetEnumerator被定义为公开的,对象用户可以与IEnumerator类型交互,下面的结果与上面是一致的");

            IEnumerator i = carLot.GetEnumerator();
            while(i.MoveNext())
            {
                //i.current返回值类型是object的
                Car myCar = (Car)i.Current;
                Console.WriteLine("{0} is going {1} MPH", myCar.Name, myCar.Speed);
            }


            Console.ReadLine();
        }
    }

    public class Garage : IEnumerable
    {
        Car[] carArray = new Car[4];  //在Garage中定义一个Car类型的数组carArray,其实carArray在这里的本质是一个数组字段  

        //启动时填充一些Car对象  
        public Garage()
        {
            //为数组字段赋值  
            carArray[0] = new Car("Rusty", 30);
            carArray[1] = new Car("Clunker", 50);
            carArray[2] = new Car("Zippy", 30);
            carArray[3] = new Car("Fred", 45);
        }

        public IEnumerator GetEnumerator()
        {
            //递归调用
            return this.carArray.GetEnumerator();
        }


    }

    public class Car
    {
        public string Name { get; set; }
        public int Speed { get; set; }

        public Car(string name, int speed)
        {
            this.Name = name;
            this.Speed = speed;
        }
    }
}

  

猜你喜欢

转载自www.cnblogs.com/Jeely/p/11004510.html