C#类可以通过foreach遍历的原理
作者:网络转载 发布时间:[ 2015/6/29 11:16:54 ] 推荐标签:软件开发
要使用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 }

sales@spasvo.com