实现Foreach遍历

实现Foreach遍历的集合类,需要实现IEnumerable接口,泛型集合则需要实现IEnumerable<T>接口

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace Foreach

{

    public  class ListForeach<T> :IEnumerable<T>  where T :class ,new()

    {

        private  T[] array;



        private int index = 0;

        public ListForeach(int  capcity)

        {

            array = new T[capcity];

        }



        public int Count

        {

            get

            {

                return index;

            }

        }



        public void Add(T value) 

        {           

            if (index >= array.Length)  

            { 

                T[] newArr = new T[array.Length * 2];

                //将原来的数组中的数据拷贝到新数组中.

                Array.Copy(array, newArr, array.Length);

                //然后将旧数组的变量指向新数组

                array = newArr;

            }

            array[index++] = value;

        }





        public IEnumerator<T> GetEnumerator()

        {

            return new TEnumeratro<T>(array, index);

            

        }



        IEnumerator IEnumerable.GetEnumerator()

        {

            return GetEnumerator();

        }

    }





    public class  TEnumeratro<T> : IEnumerator<T>

    {



         private  T [] arr ;

         private int count;

         private int position = -1; 



        public TEnumeratro(T [] array, int count)

        {

            this.arr = array;

            this.count = count;

        }



        public T Current

        {

            get {

                return arr[position];

            }

        }



        public void Dispose()

        {

            arr = null;

        }



        object IEnumerator.Current

        {

            get {

                return  this.Current;

            }

        }



        public bool MoveNext()

        {

            position++;

            if (position < this.count)

                return true;

            else

                return false;

        }



        public void Reset()

        {

            this.position = -1;

        }

    }

}

客户端代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace Foreach

{



    public class Student

    {

        public int Age {get;set; }

        public string  Name { get; set; }

        

    }



    class Program

    {

        static void Main(string[] args)

        {

            ListForeach<Student> list = new ListForeach<Student>(10);

            list.Add(new Student() {Age=111,Name="123" });

            list.Add(new Student() { Age = 222, Name = "222" });

            list.Add(new Student() { Age = 333, Name = "111" });

            list.Add(new Student() { Age = 444, Name = "23222" });

            list.Add(new Student() { Age = 22552, Name = "32" });

            list.Add(new Student() { Age = 222, Name = "1111334" });





            foreach (var s in list)

            {

                Console.WriteLine(s.Name+":"+ s.Age);



            }





            ListForeach<Student> list1 = new ListForeach<Student>(10) { 

            new Student(){ Age=666,Name="yjq"},

            new Student(){ Age=88,Name="dddd"},

            new Student(){ Age=999,Name="ddd"},

            new Student(){ Age=000,Name="==="},

            };



            foreach (var s in list1)

            {

                Console.WriteLine(s.Name + ":" + s.Age);



            }





            Console.Write(list.Count);

            Console.Read();

           

        }

    }

}

 

你可能感兴趣的:(foreach)