c# 迭代器是c#2.0以上版本新添加功能,主要功能是返回相同类型的值的有序序列的一段代码,可以作为方法、运算符、或get访问器用的代码体。迭代器代码使用yield return语句依次返回每个元素,yield break 语句终止迭代。可以在类中实现过个迭代器,但每个迭代器必须向任何类成员一样有唯一的名字,并且可以在foreach语句中被客户端访问调用。
1 public class Person
2 {
3 private string _Name;
4 public string Name
5 {
6 get { return _Name; }
7 set { _Name = value; }
8 }
9
10 public Person() { }
11 public Person(string sname)
12 {
13 this._Name = sname;
14 }
15 }
16
2 {
3 private string _Name;
4 public string Name
5 {
6 get { return _Name; }
7 set { _Name = value; }
8 }
9
10 public Person() { }
11 public Person(string sname)
12 {
13 this._Name = sname;
14 }
15 }
16
1 public class PersonIEnumerator:System.Collections.IEnumerator
2 {
3 private Person[] person;
4 private object current;
5 private int index = 0;
6
7 public object Current
8 {
9 get {
10 return current;
11 }
12 }
13
14 public PersonIEnumerator(Person[] persons) {
15 person = persons;
16 }
17
18 public bool MoveNext()
19 {
20 bool bFlag = true;
21 if (index == person.Length)
22 {
23 bFlag = false;
24 }
25 else
26 {
27 current = person[index];
28 index++;
29 bFlag = true;
30 }
31 return bFlag;
32 }
33
34 public void Reset()
35 {
36 index = 0;
37 }
38
39 public System.Collections.IEnumerator GetEnumerator()
40 {
41 return this;
42 /*
43 * 由方法GetEnumerator返回一个实现了该接口的类的实例,
44 * 当前的类实现了IEnumerator接口,所以IEnumerator的类型可以指向
45 * 当前的对象this
46 */
47
48 }
49 }
2 {
3 private Person[] person;
4 private object current;
5 private int index = 0;
6
7 public object Current
8 {
9 get {
10 return current;
11 }
12 }
13
14 public PersonIEnumerator(Person[] persons) {
15 person = persons;
16 }
17
18 public bool MoveNext()
19 {
20 bool bFlag = true;
21 if (index == person.Length)
22 {
23 bFlag = false;
24 }
25 else
26 {
27 current = person[index];
28 index++;
29 bFlag = true;
30 }
31 return bFlag;
32 }
33
34 public void Reset()
35 {
36 index = 0;
37 }
38
39 public System.Collections.IEnumerator GetEnumerator()
40 {
41 return this;
42 /*
43 * 由方法GetEnumerator返回一个实现了该接口的类的实例,
44 * 当前的类实现了IEnumerator接口,所以IEnumerator的类型可以指向
45 * 当前的对象this
46 */
47
48 }
49 }
1 static void Main(string[] args)
2 {
3 Console.WriteLine(DateTime.Now);
4 Person[] persons = new Person[3];
5 persons[0] = new Person("name1");
6 persons[1] = new Person("name2");
7 persons[2] = new Person("name3");
8
9 PersonIEnumerator personArray = new PersonIEnumerator(persons);
10 while (personArray.MoveNext())
11 {//类StudentArray实现了IEnumerator接口,所以该类的对象可以使用接口的成员(非显示)。
12
13 Console.WriteLine(((Person)personArray.Current).Name);
14 }
15
16 System.Collections.IEnumerator iet = personArray.GetEnumerator();
17 iet.Reset();
18 while (iet.MoveNext())
19 {
20 Console.WriteLine(((Person)iet.Current).Name);
21 }
22 Console.Read();
23 }
2 {
3 Console.WriteLine(DateTime.Now);
4 Person[] persons = new Person[3];
5 persons[0] = new Person("name1");
6 persons[1] = new Person("name2");
7 persons[2] = new Person("name3");
8
9 PersonIEnumerator personArray = new PersonIEnumerator(persons);
10 while (personArray.MoveNext())
11 {//类StudentArray实现了IEnumerator接口,所以该类的对象可以使用接口的成员(非显示)。
12
13 Console.WriteLine(((Person)personArray.Current).Name);
14 }
15
16 System.Collections.IEnumerator iet = personArray.GetEnumerator();
17 iet.Reset();
18 while (iet.MoveNext())
19 {
20 Console.WriteLine(((Person)iet.Current).Name);
21 }
22 Console.Read();
23 }