
·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 使用yield关键字让自定义集合实现foreach遍历
一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口)
但是我们也可以通过使用yield关键字构建的迭代器方法来实现foreach的遍历,且自定义的集合不用实现IEnumerable接口
注:虽然不用实现IEnumerable接口 ,但是迭代器的方法必须命名为GetEnumerator() ,返回值也必须是IEnumerator类型
实例代码以及简单说明如下:
1 class Person
2 {
3 public string Name;
4 public void SayHi()
5 {
6 Console.WriteLine("Hello: {0}",this.Name);
7 }
8 }
9 //非常简单的自定义集合(- -简单到增加,删除,索引器等功能都没有实现) 该类没有实现IEnumerable接口
10 class PersonList
11 {
12 Person[] pers =new Person[4];
13 public PersonList()
14 {
15 pers[0] = new Person() { Name = "1" };
16 pers[1] = new Person() { Name = "2" };
17 pers[2] = new Person() { Name = "3" };
18 pers[3] = new Person() { Name = "4" };
19
20 }
21 //简单的迭代器方法
22 public IEnumerator GetEnumerator()
23 {
24
25 foreach (Person item in pers)
26 {
27 //yield return 作用就是返回集合的一个元素,并移动到下一个元素上
28 yield return item;
29 }
30
31 }
32 }
33 class PRogram
34 {
35 static void Main(string[] args)
36 {
37 PersonList list = new PersonList();
38 foreach (Person item in list)
39 {
40 item.SayHi();
41 }
42 Console.ReadLine();
43 }
44 }