实现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();
           
        }
    }
}

 

posted @ 2014-04-12 12:24  老树昏鸦  阅读(1658)  评论(1编辑  收藏  举报