先上代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace ForeachClass { public class Foreach<T> : IEnumerable<T> { private T[] str; private int count=0; public Foreach(int n) { str = new T[n]; } public void Add(T value) { str[count] = value; count++; } public IEnumerator<T> GetEnumerator() { foreach (T d in str) { yield return d; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }
测试:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ForeachClass { class Program { static void Main(string[] args) { Foreach<int> f = new Foreach<int>(10); f.Add(2); f.Add(4); f.Add(56); f.Add(77); f.Add(34); foreach (int a in f) { Console.WriteLine(a+" "); } } } }
您可以通过实现IEnumerable<T>接口来使得Foreach类支持foreach语句。
IEnumerable 只有一个方法:GetEnumerator(),它的工作是返回一个实现了IEnumerator<T>
接口的类。C#语言使用一个新的关键字yield来为创建枚举器(enumerator)提供特殊的帮
助。