1 接口IEnumerator,IEnumerable区别IEnumerable是一个声明式的接口,声明实现该接口的类就是“可迭代的enumerable”,但并没用说明如 何实现迭代器(iterator).其代码实现为:public interface IEnumerable{IEnumerator GetEnumerator();}
而IEnumerator接口是实现式接口,它声明实现该接口的类就可以作为一个迭代器iterator.其代码实现为:        public interface IEnumerator{object Current { get; }bool MoveNext();void Reset();}
所以一个collection要支持Foreach进行遍历,就必须实现IEnumerable,并一某种方式返回迭代器对象:IEnumerator
2 IEnumerable,IEnumerable<T>区别
我们可以看一段代码:
public interface IEnumerable<out T>:IEnumerable
{IEnumerator<T> GetEnumerator();
}
从上面代码可以很清楚知道IEnumerable<T>是IEnumerable接口的泛型版本。
使用泛型,不会强行对值类型进行装箱和拆箱,或引用类型进行向下强制类型转换,使程序性能提高。泛型定义的变量有类型限制,所以泛型提高了程序的类型安全并且提高了代码的重用性。
比如我们常见的IList      IList<T>继承自ICollection<T>,ICollection<T>继承自IEnumerable<T>,IEnumerable<T>继承自IEnumerable,所以List<T>实现了IEnumerable<T>接口,也就是实现了IEnumerable接口
所以可以经常看到这样的代码 :public static IEnumerable<T> Filter<T>(IEnumerable<T> ObjectList)   {   List<T> ResultList = new List<T>();   ..............return ResultList;    }

转载于:https://blog.51cto.com/tangqiongqi/1424995

IEnumerator,IEnumerable,IEnumerableT相关推荐

  1. IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解

    Update逻辑 IEnumerator/ IEnumerable public interface IEnumerable { IEnumerator GetEnumerator(); } publ ...

  2. C# IEnumerator/IEnumerable

    迭代器模式 与 C# IEnumerator/IEnumerable Jul 21, 2018 | 编程 |  阅读 迭代器模式 与 C# IEnumerator/IEnumerable Part1 ...

  3. C# IEnumerator IEnumerable接口

    ​前言 使用linq的时候大家应该都知道IEnumerable和IEnumerator接口! 解释一下 IEnumerable 它利用 GetEnumerator() 返回 IEnumerator 集 ...

  4. 2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?

    IEnumerator.IEnumerable这两个接口单词相近.含义相关,傻傻分不清楚. 入行多年,一直没有系统性梳理这对李逵李鬼. 最近本人在怼着why神的<其实吧,LRU也就那么回事> ...

  5. [转]那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable

    1.首先看一个简单的例子 int[] myArray = { 1, 32, 43, 343 };IEnumerator myie = myArray.GetEnumerator();myie.Rese ...

  6. IEnumerable和IEnumerator详解

    引言 IEnumerable是可枚举的所有非泛型集合的基接口, IEnumerable包含一个方法GetEnumerator(),该方法返回一个IEnumerator:IEnumerator提供通过C ...

  7. IList,ICollection,IEnumerable,IEnumerator,IQueryable

    IList 是 ICollection 接口的子代,并且是所有非泛型列表的基接口.IList 实现有三种类别:只读.固定大小和可变大小.无法修改只读 IList.固定大小的 IList 不允许添加或移 ...

  8. C# IEnumerator和IEnumerable的区别

    C#有很多接口 ,这些接口牵扯一些复杂的算法问题,让很多新手对这些接口很难理解,尤其是IEnumerator和IEnumerable这两个接口,在IEnumeratorIEnumerable会让新手很 ...

  9. IEnumerable是否应该实现IEnumerable接口

    C#2.0的遍历器(Iterator),应该是对Gamma提出的Iterator设计模式的实现.在C#中,如果某个类型继承了接口IEnumerable,或者继承了泛型接口IEnumerable < ...

最新文章

  1. php判断数组不重复的元素,php从数组中随机选择若干不重复元素
  2. 如何屏蔽VS2013中的4996错误!
  3. linux由哪些部分组成,linux内核处于什么位置?,为你介绍一些Linux操作系统的基础知识(一)...
  4. ASM文件拷贝到本地
  5. jvm(6)-Class字节码文件结构总结
  6. C++ STL list构造
  7. [转]java中的值传递和引用传递
  8. TX2在Turtlebot测试kobuki
  9. java中的状态机模式_Java 有限状态机 (设计模式——状态模式)
  10. mysql 数据增量备份_mysqlmysqldump数据备份和增量备份
  11. Spring源码阅读之在spring源码中创建一个gradle测试模块
  12. 一步快速将Smartform转成生成PDF文件
  13. 固态硬盘性能下降,造成win10卡顿,及解决方法
  14. 4.凤凰架构:构建可靠的大型分布式系统 --- 透明多级分流系统
  15. 面试阿里,看这一篇就够了!
  16. Eureka服务注册中心搭建
  17. 万能DOS启动盘制作全攻略(转)
  18. 磁盘清理 磁盘分析 磁盘空间 磁盘大小 可视化【软件】
  19. srt文件的时间轴平移处理
  20. 图鸟小程序+前后端开源项目

热门文章

  1. React+Redux仿Web追书神器
  2. 大数据量生成工具源代码(Delphi)
  3. MySQL --- 计算指定日期为当月的第几周
  4. redhat Nginx 安装
  5. javascript 比量str今天的日期是,参数diff
  6. 双端队列 HDOJ 3530 Subsequence
  7. find -mtime时间算法
  8. 给大家几个不花钱看书的办法【人人都是产品经理】
  9. 算法专题(1)-信息学基本解题流程!
  10. sublime重装后碰到Unable to read Packages