打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
IEnumerable接口的一个简单示例
IEnumerable接口的一个简单示例
2012-04-02     0 个评论     
收藏   
我要投稿

IEnumerable接口是实现foreach循环的一个重要的接口,像数组、集合等之所以可以用foreach循环遍历其中的每个元素便是因为他们都实现了IEnumerable接口而,那么这个接口到底是如何运行的呢,通过下面一个例子可以得到一些启发。
定义一个这样简单的类:
01.public class Person 
02.    { 
03.        private string[] names= new string[] { "A", "B", "C" }; 
04.    } 

由于names属性是私有属性,所以无法通过Person类的对象对其进行访问,也就无法对其遍历,可以让Person类实现IEnumerable接口来对其进行遍历,实现接口后的类如下:
01.public class Person : IEnumerable 
02.    { 
03.        private string[] names= new string[] { "A", "B", "C" }; 
04.      
05.        public IEnumerator GetEnumerator() 
06.        { 
07.             
08.        }  
09.    } 

可以看到实现了IEnumerable接口后Person类里面必须实现一个GetEnumerator函数,该函数返回的是一个类型为IEnumerator 的对象,于是我们再写一个类继承自IEnumerator 接口:
01.public class PersonEnumerator : IEnumerator 
02.   { 
03.       //定义一个字符串数组 
04.       private string[] _names; 
05. 
06.       //遍历时的索引 
07.       private int index = -1; 
08. 
09.       //构造函数,带一个字符串数组的参数 
10.       public PersonEnumerator(string[] temp) 
11.       { 
12.           _names = temp; 
13.       } 
14. 
15.       //返回当前索引指向的names数组中的元素 
16.       public object Current 
17.       { 
18.           get { return _names[index]; } 
19.       } 
20. 
21.       //索引,判断是否遍历完成 
22.       public bool MoveNext() 
23.       { 
24.           index++; 
25.           if (index < _names.Length) 
26.           { 
27.               return true; 
28.           } 
29.           else 
30.               return false; 
31.       } 
32. 
33.       //重置索引的值,以便下一次遍历 
34.       public void Reset() 
35.       { 
36.           index = -1; 
37.       } 
38.   } 

然后对GetEnumerator函数稍加修改就大功告成了,如下:
01.public class Person : IEnumerable 
02.   { 
03.       private string[] names = new string[] { "A", "B", "C" }; 
04.     
05.       public IEnumerator GetEnumerator() 
06.       { 
07.           //调用PersonEnumerator类的构造函数,并Person类中的names数组传递过去 
08.           return new PersonEnumerator(names); 
09.       }  
10.   } 

然后就可以用foreach对Person类的对象进行遍历了,如下:
01.static void Main(string[] args) 
02.        { 
03.            Person p1 = new Person(); 
04.            foreach (string item in p1) 
05.            { 
06.                Console.WriteLine(item); 
07.            } 
08.            Console.ReadKey(); 
09.        } 

我们也可以用如下方法对names数组进行遍历:
01.static void Main(string[] args) 
02.       { 
03.           Person p1 = new Person(); 
04.           IEnumerator rator = p1.GetEnumerator(); 
05.           while (rator.MoveNext()) 
06.           { 
07.               Console.WriteLine(rator.Current); 
08.           } 
09.           Console.ReadKey(); 
10.       }
  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#如何实现自定义集合的IEnumerable 和 IEnumerator 接口并使用foreach访问自定义集合
IEnumerable和IEnumerator介绍和区别
IEnumerable的用法
IEnumerable和IEnumerator 详解
C#的枚举数(Enumerator)和可枚举类型(Enumerable)
最佳实践集合(转 MSDN)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服