首页 > 代码库 > IEnumerable、GetEnumerator、IEnumerator的理解

IEnumerable、GetEnumerator、IEnumerator的理解

概念文字性的东西,我们就不说了,这里我们来点具体的实例第呀;

实例一:

using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Pratice001{   public  class Test:IEnumerable    {        private static int count = 12;        private string[] elements;        private int ctr = 0; //数组下标的计数器;        public Test(params string[] initialString)        {            elements = new String[8];            foreach (string s in initialString)            {                elements[ctr++] = s; //数据初始化            }        }       public  Test(string initialString, char[] delimiters)        {            elements = initialString.Split(delimiters); //不同的方式 进行初始化;        }        //实现接口中的方法;        public IEnumerator GetEnumerator()        {            return new ForeachTestEnumerator(this);        }        public class ForeachTestEnumerator : IEnumerator        {            private int position = -1;            private Test t;            public ForeachTestEnumerator(Test t)            {                this.t = t;            }            //实现接口;            public object Current            {                get                {                    return t.elements[position];                }            }            public bool MoveNext()            {                if (position < t.elements.Length - 1)                {                    position++;                    return true;                }                else                {                   return  false;                }            }            public void Reset()            {                position = -1;            }        }    }}

实例二:

然后我们再来一个实例!

 

using System;using System.Collections;public class Person{    public Person(string fName, string lName)    {        this.firstName = fName;        this.lastName = lName;    }    public string firstName;    public string lastName;}public class People : IEnumerable{    private Person[] _people;    public People(Person[] pArray)    {        _people = new Person[pArray.Length];        for (int i = 0; i < pArray.Length; i++)        {            _people[i] = pArray[i];        }    }    IEnumerator IEnumerable.GetEnumerator()    {       return (IEnumerator) GetEnumerator();    }    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)    {        _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 App{    static void Main()    {        Person[] peopleArray = new Person[3]        {            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);    }}/* This code produces output similar to the following: * * John Smith * Jim Johnson * Sue Rabon * */

最好,跟代码,一步步的调试出来看看的呀;

 

IEnumerable、GetEnumerator、IEnumerator的理解