首页 > 学院 > 开发设计 > 正文

C#类可以通过foreach遍历的原理

2019-11-17 02:17:52
字体:
来源:转载
供稿:网友
C#类可以通过foreach遍历的原理

要使用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:IEnumerable26     {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             set36             {37                 if (index>=Count)38                 {39                     listStudent.Add(value);40                 }41                 else42                 {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:IEnumerator57     {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 Current67         {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             else79             {80                 return true;81             }82         }83 84         public void Reset()85         {86             index = -1;87         }88     }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表