《转》IEnumerable、IEnumerator两个接口的认识
2015-10-20 17:43
330 查看
前言
IEnumerable、IEnumerator到现在为止对这两个接口还是不太理解,不理解但是自己总是想着试着要搞明白,毕竟自己用的少,所以在此先记录一下。
查看并使用两个接口
接下来我们先来看看两个接口的定义。
先来看一下IEnumerable接口,其实看过这个接口之后,发现它其实是非常的简单,只包含一个方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象,如下面截图所示:
View Code
其实上面例子中的调用我们就可以使用foreach来调用了,那么现在我们来用foreach来调用看看。
总结
通过上面我实现的几个简单的例子可以发现,一个类型支持foreach遍历的条件可以是:
1、第一个方案是:这个类实现IEnumerable接口
2、第二个方案是:这个类有一个public的GetEnumerator的实例方法(不用继承IEnumerable实现接口),并且返回类型中有public 的bool MoveNext()实例方法和public的Current实例属性。
实现了IEnmerable<T>接口的集合,是强类型的。它为子对象的迭代提供类型更加安全的方式。
原文:http://www.cnblogs.com/aehyok/p/3642103.html
可以自己实现接口完成迭代。
IEnumerable、IEnumerator到现在为止对这两个接口还是不太理解,不理解但是自己总是想着试着要搞明白,毕竟自己用的少,所以在此先记录一下。
查看并使用两个接口
接下来我们先来看看两个接口的定义。
先来看一下IEnumerable接口,其实看过这个接口之后,发现它其实是非常的简单,只包含一个方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象,如下面截图所示:
View Code
其实上面例子中的调用我们就可以使用foreach来调用了,那么现在我们来用foreach来调用看看。
static void Main(string[] args) { MyList list=new MyList(); foreach (object obj in list) { Console.WriteLine(obj.ToString()); } Console.ReadLine(); }
总结
通过上面我实现的几个简单的例子可以发现,一个类型支持foreach遍历的条件可以是:
1、第一个方案是:这个类实现IEnumerable接口
2、第二个方案是:这个类有一个public的GetEnumerator的实例方法(不用继承IEnumerable实现接口),并且返回类型中有public 的bool MoveNext()实例方法和public的Current实例属性。
实现了IEnmerable<T>接口的集合,是强类型的。它为子对象的迭代提供类型更加安全的方式。
原文:http://www.cnblogs.com/aehyok/p/3642103.html
public class peoples { public string name { get; set; } public int age { get; set; } } public class people:IEnumerable { peoples[] poli = new peoples[3] { new peoples() { age = 2, name = "dd开始的" }, new peoples() { name = "啊圣诞节", age = 34 }, new peoples() { name = "asks", age = 34 } }; #region IEnumerable 成员 public IEnumerator GetEnumerator() { return this.poli.GetEnumerator(); } #endregion }
可以自己实现接口完成迭代。
相关文章推荐
- Map Wiki -- proposed by Shuo Ren
- 实现windows批处理下的计时功能
- 【转】mac上安装gradle
- [算法练习]最长公共子序列
- 使用Git的Push出现rejected - non-fast-forward错误
- iOS开发笔记--iOS应用架构谈 view层的组织和调用方案
- MySQL编码问题
- 关于bundle的创建方式
- Tomcat手动指定jdk路径
- ios archives 出现的是other items而不是iOS Apps的解决方案
- bzoj1211: prufer序列 | [HNOI2004]树的计数
- android显示证书sha1
- saiku - 连接 mondrain 数据源出错-空指针错误
- 本地搭建gitlab环境,配置邮件通知和基本操作
- Linux 内核空间与用户空间
- github上修改别人的代码并上传
- Android 退出应用程序
- ERROR actor.OneForOneStrategy: org.apache.spark.SparkContext
- 使用pdf.js显示pdf文件
- linux中crontab实现以秒执行任务