概念文字性的东西,我们就不说了,这里我们来点具体的实例第呀;
实例一:
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); } }
最好,跟代码,一步步的调试出来看看的呀;