IEnumerable和IEnumrator用法
来源:互联网 发布:小程序三级分销源码 编辑:程序博客网 时间:2024/05/22 01:51
先用一个修改过的代码来演示用法,只来干的,不来稀的。
/* * Created by SharpDevelop. * User: Owner * Date: 2012-12-14 * Time: 13:43 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */using System;using System.Collections;/// <summary>/// IEnumerable和IEnumrator组合起来使用实现foreach。/// </summary>namespace TestIEnumeratorAndIEnumratable{/// <summary>/// 个体类:这个类保存了单个体的信息和一个方法/// </summary>public class 个体{public string 信息1;public string 信息2;public 个体(string 信息1, string 信息2){this.信息1 = 信息1;this.信息2 = 信息2;}public void 报数(){Console.WriteLine(this.信息1 + " = " + this.信息2);}}/// <summary>/// 集体类:继承自IEnumerable接口,并提供foreach的可能。/// </summary>public class 集体 : IEnumerable{/// <summary>/// 集体就是一票个体/// </summary>private 个体[] 一票个体;/// <summary>/// 这个集体为了简便,是有初始的一群个体凑一块组成的。/// </summary>/// <param name="pArray"></param>public 集体(个体[] pArray){一票个体 = new 个体[pArray.Length];for (int i = 0; i < pArray.Length; i++)一票个体[i] = pArray[i];}/// <summary>/// 接口IEnumerable的实现函数,获取foreach用到的迭代器/// </summary>/// <returns></returns>public IEnumerator GetEnumerator(){return new 个体指针(一票个体);}}/// <summary>/// 个体指针:针对个体类的迭代器,继承自IEnumerator。/// 提供了迭代器的走向函数支持。/// </summary>public class 个体指针 : IEnumerator{/// <summary>/// 一票个体的指针/// </summary>public 个体[] 一票个体的指针;/// <summary>/// 迭代器当前位置的指示标志/// </summary>int 位置 = -1;/// <summary>/// 个体指针的赋值:指向一堆无管理的个体/// </summary>/// <param name="list"></param>public 个体指针(个体[] list){一票个体的指针 = list;}/// <summary>/// 接口IEnumerator的实现函数,迭代器下移。foreach用到,我们不调用。/// </summary>/// <returns></returns>public bool MoveNext(){位置++;return (位置 < 一票个体的指针.Length);}/// <summary>/// 接口IEnumerator的实现函数,迭代器复位。foreach用到,我们不调用。/// </summary>public void Reset(){位置 = -1;}/// <summary>/// 接口IEnumerator的实现函数,获取当前值。foreach用到,我们不调用。/// </summary>public object Current{get{try{return 一票个体的指针[位置];}catch(IndexOutOfRangeException){throw new InvalidOperationException();}}}}class Program{public static void Main(string[] args){个体[] 个体集合 = new 个体[3]{new 个体("1", "One"),new 个体("2", "Two"),new 个体("3", "Three")};集体 list = new 集体(个体集合);foreach (个体 p in list)p.报数();Console.ReadKey();}}}
上面的示例很清楚的演示了IEnumerator(迭代器接口)和IEnumerable(遍历接口)的用法。普遍代表一切。
我想用个体和集体的概念可以更容易理解这个功能。
照我目前理解,单独的IEnumerator接口没有任何用处。
IEnumerable接口可以和系统提供的各种继承自IEnumerator的类(ArrayList,Queue等)来配合,而没有必要每次都实现。
- IEnumerable和IEnumrator用法
- 不定义IEnumerable和IEnumrator接口就能使用foreach语句的方法
- IEnumerable用法
- IEnumerable和IEnumerable<T>接口
- IEnumerable和IEnumerable<T>接口
- IEnumerable和IEnumerable<T>接口
- IEnumerable和IEnumerable T接口
- IEnumerable和IEnumerable<T>接口
- IEnumerable 和 IEnumerator 接口
- IEnumerable 和 IEnumerator 接口
- IEnumerable 和 IEnumerator 接口
- IEnumerable和IEnumerator接口
- IEnumerable 和IQueryable
- IEnumerable和IEnumerator区别
- IEnumerable接口和迭代器
- IEnumerable和IEnumerator区别
- IEnumerator和IEnumerable区别
- IEnumerable和IEnumerator 详解
- Mysql 相关
- change exist Android branch to other branch
- mshtml一些用法
- C++第16周项目2——带姓名的成绩单(字符数组版)
- linux配置java环境变量(详细)
- IEnumerable和IEnumrator用法
- 局域网SOCKET通信(TCP)需要心跳包来保持长连接么
- Spring引用外部文件生成主键配置
- [转]大网站都用什么操作系统与 Web 服务器 ?
- JQuery常用方法一览
- 指定用户名登录mysql
- C#与C++结构体的对应
- OpenGL纹理-12.5、纹理坐标
- Cron表达式详解