要使用foreach的遍歷的類首先要滿足的條件
1、 類要實現公共方法 public IEnumerator GetEnumerator(){},還可以繼承IEnumerable接口來實現這個方法
2、類實現了 public IEnumerator GetEnumerator(){}中,要返回一個對象用於遍歷的,當然這個對象必須繼承IEnumerator 接口
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Person p = new Person(); 6 p[0] = "小明"; 7 p[1] = "曉虹"; 8 p[2] = "小芳"; 9 p[3] = "小龍"; 10 for (int i = 0; i < p.Count; i++) 11 { 12 Console.WriteLine(p[i]); 13 } 14 15 Console.WriteLine("=========================================="); 17 foreach (var name in p) 18 { 19 Console.WriteLine(name); 20 } 21 Console.ReadKey(); 22 } 23 } 24 25 internal class Person:IEnumerable 26 { 27 private List<string> listStudent =new List<string>(); 28 public int Count { 29 get { return listStudent.Count; } 30 } 31 32 public string this[int index] 33 { 34 get { return listStudent[index]; } 35 set 36 { 37 if (index>=Count) 38 { 39 listStudent.Add(value); 40 } 41 else 42 { 43 listStudent[index] = value; 44 } 45 } 46 } 47 48 49 50 public IEnumerator GetEnumerator() 51 { 52 return new PersonIEnumerator(listStudent); 53 } 54 } 55 56 class PersonIEnumerator:IEnumerator 57 { 58 public PersonIEnumerator(List<string> _listName) 59 { 60 listName = _listName; 61 } 62 63 private List<string> listName; 64 private int index = -1; 65 66 public object Current 67 { 68 get {return listName[index]; } 69 } 70 71 public bool MoveNext() 72 { 73 index++; 74 if (index>=listName.Count) 75 { 76 return false; 77 } 78 else 79 { 80 return true; 81 } 82 } 83 84 public void Reset() 85 { 86 index = -1; 87 } 88 }