IEnumerator/IEnumerable接口
IEnumberator函数成员
- Current返回序列中当前位置项的 属性
- 只读属性
- 返回object类型
- MoveNext把枚举器位置前进到集合中下一项的方法
- 新位置有效返回true,否则false
- 枚举器原始位置在序列第一项前面,所以如果要用Current必须先用MoveNext()
- Reset枚举器位置重置为初始位置
IEnumerable接口函数成员
该接口只有一个方法GetEnumerator()
IEnumerable和 IEnumberator使用范例
一个具有IEnumberable的类
Class ColorEnumerator:IEnumerator { string [] _colors; ; //构造函数,把传入数组保存到_colors中 public ColorEnumerator(string[] theColors) { _colors=new string[thisColors.Length]; ;i<theColors.Length;i++) { _colors[i]=theColors[i]; } } //实现接口 public object Current { get { //异常处理 ||_position>=_color.Length) throw new InvalidOperationException(); return _colors[_position]; } } public bool MoveNext() { ) { _position++;return true; }else return false; } public void Reset() { _position=-; } } //继承自定义枚举器 Class Mycolors: ColorEnumerator { string[] Colors={"Red","Yellow","Blue"}; //实现IEnumerable接口返回Colors数组的迭代器类(实现了IEnumerator的类) //这个迭代器是自定义的 public IEnumbertor GetEnumbertor() { return new ColorEnumerator(Colors); } } class Program { static void Main() { Mycolors colors=new Mycolors(); foreach(string c in colors) { Console.WriteLine(c); } } }
泛型枚举接口
最主要区别:
泛型:
IEnumerable GetEnumerator获得的IEnumator是T类型的,IEnumator<T>用Current获得的不是object了,而是T类型的
IEnumerator<T>反编译
public interface IEnumerator<out T> : IDisposable, IEnumerator { T Current { get; } }
publicinterfaceIEnumerable<out T>:IEnumerable { IEnumerator<T>GetEnumerator(); }

IEnumerator非泛型类返回值已经定死为object
如果要实现泛型,则把IEnumerator非泛型放在IEnumerator泛型中,它有一个Current,这个能把数据变成指定类型。
IEnumerator/IEnumerable接口的更多相关文章
- foreach为什么要实现IEnumerable接口而不是直接用IEnumerator接口
在.Net中,要想被foreach遍历,那么目标对象要实现IEnumerable或IEnumerable<T>接口,这个接口有一个方法,GetEnumerator(),返回一个IEnume ...
- C# 索引器,实现IEnumerable接口的GetEnumerator()方法
当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...
- 你可能不知道的陷阱, IEnumerable接口
1. IEnumerable 与 IEnumerator IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的 ...
- IEnumerable接口
IEnumerable接口顾名思义就是 可枚举的,可列举的. 接口也很简单,返回一个 枚举器对象 IEnumerator . [ComVisible(true), Guid("496B0AB ...
- IEnumerable接口的实现
对象要实现可以迭代需IEnumerable接口并实现GetEnumerator方法.一下简单例子 public class SPEnumerable<T> : IEnumerable { ...
- IEnumerable 接口 实现foreach 遍历 实例
额 为啥写着东西? 有次面试去,因为用到的时候特别少 所以没记住, 这个单词 怎么写! 经典的面试题: 能用foreach遍历访问的对象的要求? 答: 该类实现IEnumetable 接口 声明 ...
- 通过IEnumerable接口遍历数据
使用IEnumerable接口遍历数据,这在项目中会经常的用到,这个类型呢主要是一个枚举器. 1.首先需要让该类型实现一个名字叫IEnumerable的接口,实现该接口的主要目的是为了让当前类型中增加 ...
- 迭代器模式 与 C# IEnumerator/IEnumerable
Part1 迭代器模式 与 接口 IEnumerable IEnumerator interface IEnumerable { IEnumerator GetEnumerator(); } // 泛 ...
- 【C#】IEnumrator的枚举数和IEnumerable接口
声明IEnumerator的枚举数 要创建非泛型接口的枚举数,必须声明实现IEnumerator接口的类,IEnumerator接口有如下特性: 1.她是System.Collections命名空间的 ...
随机推荐
- WIN7实用的运行命令
运行命令主要是DOS操作系统的运行方式.为方便用户的操作,微软公司将一些常用的命令,如DIR,CD等命令全部集成在系统里面:存放这些内部命令的文件是“Command”(文件后缀.com).它与IO.s ...
- opensuse pptp拨号设置注意事项
防火墙一定要关闭 路由器要映射本地1723和1701端口 tcp协议(个别路由器和网络环境,可以先不设置) pptp配置注意协议的选择:
- 高仿百度传课应用客户端源码iOS版
高仿百度传课iOS版,版本号:2.4.1.2 运行环境:xcode6.3 ios8.3 (再往上系统没有测试) 转载请注明出处,不可用于商业用途及不合法用途. 如果你觉得不错,欢迎 star 哦 ...
- call与apply函数
call与apply函数 1.为什么需要call与apply函数 Javascript中,每一个函数内部都有一个特殊的关键词this,其随着所处环境的不同其指向也是不同的. 函数的内部其this也是指 ...
- 反射-Reflect
1.得到一份Class(同一个类在JVM中只有一份字节码) 三种方式:类名.class, Class.forName("全限定名");, 对象.getClass(); 基本类型 i ...
- debian终端菱形乱码修复
最简安装debian的时候由于没有中文字库,若选择看中文环境会出现菱形乱码.先把zh.utf8换为us.utf8看着好顺眼些.按空格键取消已选的zh.utf8选项按空格键选择us.utf8选项ok
- 字符串反转(StringBuffer)
package com.java1234.chap03.sec08; public class zifufanzhuan { public static void main(String[] args ...
- Redis 一:安装篇
.安装环境,虚拟机 + centos6. PS::前提已经安装了yum的情况下 第一步:安装 mkdir /usr/redis 新建redis目录 cd /usr/redis 进入目录 wget ht ...
- php中url传递中文字符,特殊危险字符的解决方法
php中的urldecode,base64_encode函数然后再结合自己写的替换函数来进行安全传递url中文字符,特殊危险字符. 需要在url中传递中文字符或是其它的html等特殊字符,似乎总会有各 ...
- VB最新使用教程
Visual Basic是一种由 微软公司开发的结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.这是一种可用于微软自家产品开发的语言.它源自于BASIC编程语言. ...