若要为类增加foreach支持,可在类中增加一个迭代器,即在类中实现IEnumerable接口。 必须实现IEnumerator<T> GetEnumerator()方法。 namespace testIEnumberable { class Program { static void Main(string[] args) { Container <int> cntnr=new Container<int>() ; List<int> li=new List<int>() ; li.Add (1); li.Add(2); li.Add(3); li.Add(4); li.Add(5); li.Add(6); li.Add(7); li.Add(8); li.Add(9); li.Add(10); cntnr.List = li; foreach (int i in cntnr) { Console.WriteLine(i); } foreach (int i in cntnr.ReverseOrder ()) { Console.WriteLine(i); } foreach (int i in cntnr.ForWardOrderStep(2)) { Console.WriteLine(i); } foreach (int i in cntnr.ReverseOrderStep(2)) { Console.WriteLine(i); } } } public class Container<T> { public Container() { } private List<T> interanlList=new List<T>() ; public List <T > List { set{interanlList =value ;} } //这个迭代器从第一个元素到最后一个元素迭代处理每一个元素 public IEnumerator<T> GetEnumerator() { for (int index = 0; index < interanlList.Count; index++) { yield return (interanlList[index]); } } //这个迭代器从最后一个元素到第一个元素迭代处理每一个元素 public IEnumerable<T> ReverseOrder() { for (int index = interanlList.Count - 1; index >= 0; index--) { yield return (interanlList[index]); } } //顺序跳过指定数目的元素 public IEnumerable<T> ForWardOrderStep(int step) { for (int index = 0; index < interanlList.Count; index += step) { yield return (interanlList[index]); } } //逆向跳指定数目的元素 public IEnumerable<T> ReverseOrderStep(int step) { for (int index = interanlList.Count - 1; index >= 0; index -= step) { yield return (interanlList[index]); } } } }