IEnumberator函数成员

  • Current返回序列中当前位置项的 属性

    • 只读属性
    • 返回object类型
  • MoveNext把枚举器位置前进到集合中下一项的方法
    • 新位置有效返回true,否则false
    • 枚举器原始位置在序列第一项前面,所以如果要用Current必须先用MoveNext()
  • Reset枚举器位置重置为初始位置

IEnumerable接口函数成员

该接口只有一个方法GetEnumerator()

IEnumerable和 IEnumberator使用范例

一个具有IEnumberable的类

  1.  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>反编译

  1.  public interface IEnumerator<out T> : IDisposable, IEnumerator
     {
       T Current
         {
          get;
       }
     }
实现IEnumerator<T>需要实现T Current属性,IEnumerator中的object Current和其余两个方法
还有要实现IDisposable
 
 
IEnumerator<T>反编译
  1.  publicinterfaceIEnumerable<out T>:IEnumerable
     {
         IEnumerator<T>GetEnumerator();
     }

 

IEnumerator非泛型类返回值已经定死为object

如果要实现泛型,则把IEnumerator非泛型放在IEnumerator泛型中,它有一个Current,这个能把数据变成指定类型。

 

IEnumerator/IEnumerable接口的更多相关文章

  1. foreach为什么要实现IEnumerable接口而不是直接用IEnumerator接口

    在.Net中,要想被foreach遍历,那么目标对象要实现IEnumerable或IEnumerable<T>接口,这个接口有一个方法,GetEnumerator(),返回一个IEnume ...

  2. C# 索引器,实现IEnumerable接口的GetEnumerator()方法

    当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...

  3. 你可能不知道的陷阱, IEnumerable接口

    1.  IEnumerable 与  IEnumerator IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的 ...

  4. IEnumerable接口

    IEnumerable接口顾名思义就是 可枚举的,可列举的. 接口也很简单,返回一个 枚举器对象 IEnumerator . [ComVisible(true), Guid("496B0AB ...

  5. IEnumerable接口的实现

    对象要实现可以迭代需IEnumerable接口并实现GetEnumerator方法.一下简单例子 public class SPEnumerable<T> : IEnumerable { ...

  6. IEnumerable 接口 实现foreach 遍历 实例

    额 为啥写着东西? 有次面试去,因为用到的时候特别少 所以没记住, 这个单词 怎么写! 经典的面试题: 能用foreach遍历访问的对象的要求? 答:  该类实现IEnumetable 接口   声明 ...

  7. 通过IEnumerable接口遍历数据

    使用IEnumerable接口遍历数据,这在项目中会经常的用到,这个类型呢主要是一个枚举器. 1.首先需要让该类型实现一个名字叫IEnumerable的接口,实现该接口的主要目的是为了让当前类型中增加 ...

  8. 迭代器模式 与 C# IEnumerator/IEnumerable

    Part1 迭代器模式 与 接口 IEnumerable IEnumerator interface IEnumerable { IEnumerator GetEnumerator(); } // 泛 ...

  9. 【C#】IEnumrator的枚举数和IEnumerable接口

    声明IEnumerator的枚举数 要创建非泛型接口的枚举数,必须声明实现IEnumerator接口的类,IEnumerator接口有如下特性: 1.她是System.Collections命名空间的 ...

随机推荐

  1. Android之天气APP

    做一个天气信息APP,通过读取公开发布的气象数据,提供实时天气更新,帮助用户时刻了解天气情况.通过APP可以查询到自己所处位置的天气预报,也可以通过定位系统,获取省内任意位置的气象环境信息. API接 ...

  2. C#.NET实现Word或Excel文件转为HTML文件

    Word文件转html,返回相对路径 private string GetPathByDocToHTML(string strFile) { if (string.IsNullOrEmpty(strF ...

  3. 巧用Excel分列功能处理数据

    Technorati 标签: 数据处理      今天,主要工作就是处理测试数据,统计汇总成图表来显示.先来说说要求,然后给出我在折腾这堆数据中遇到的问题以及解决方法.   问题要求:       格 ...

  4. Excel中 设置使得每行的颜色不一样

        在编写测试案例的时候,众多的excel行看的眼睛花花的,这里给出一个小技巧,设置Excel的每行显示的颜色不一样,最终的效果如下:    具体操作:     1. Ctrl+A全选所有表格区域 ...

  5. git使用小结

    本篇文章主要介绍自己在平时工作中使用git的一些常用命令,之前都是记录在本子上面,现在把他们记录在博客上,便于保存和回顾. 1. 建立自己的git仓库 1.1 在一个新建的repo文件夹里面,执行gi ...

  6. DB2&&oracle-培训内容

    DB2 1 Data Sharing架构,高可用 2 DB2的对象主要有以下几类:database,storage group, Tablspace, indexspace, table,index ...

  7. 【转】使用Memcached提高.NET应用程序的性能

    在应用程序运行的过程中总会有一些经常需要访问并且变化不频繁的数据,如果每次获取这些数据都需要从数据库或者外部文件系统中去读取,性能肯定会受到影响,所以通常的做法就是将这部分数据缓存起来,只要数据没有发 ...

  8. (转)Jmeter内存溢出处理方式记录

    方法一: 使用jmeter进行压力测试时 遇到一段时间后报内存溢 出outfmenmory错误,导致jmeter卡死了,先尝试在jmeter.bat中增加了JVM_ARGS="- Xmx20 ...

  9. linux 关机方式

    linux 关机命令: 1-  init 0 关机. 具体详情接受可以 init --help 查询 如下: init [OPTIONS...] {COMMAND} Send control comm ...

  10. php基础小知识

    1.php中的双引号可以正确的解析变量与转义序列,而单引号只会按照声明原样显示:双里面的字段会经过编译器解释,然后再当作HTML代码输出:单引号里面的不进行解释,直接输出. 2.转义序列是针对源代码的 ...