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

发表于:2015-6-29 10:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:白猪    来源:51Testing软件测试网采编

  要使用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     }
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号