caizhimin816

博客园 首页 新随笔 联系 订阅 管理

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 

 

 

 

 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     }

 

 

 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         }

 

 

posted on 2010-04-01 12:26  疯子蔡  阅读(607)  评论(0编辑  收藏  举报