zoukankan      html  css  js  c++  java
  • IEnumerator与IEnumerable探讨

    一套完整的 IEnumerator 和IEnumerable 关系

        public class MyClass : IEnumerator
    {
    public MyClass(int Size)
    {
    this.Index = -1;
    Info = new string[Size];
    for (int i = 0; i < Size; i++)
    {
    Info[i] = i.ToString();
    }
    }

    private string[] Info;
    public int Index;
    public object Current { get { return Info[Index]; } }

    public bool MoveNext()
    {
    Index++;
    return Index >= Info.Length ? false : true;
    }

    public void Reset()
    {
    Index = -1;
    }

    }
    public class MyClassCollection : IEnumerable
    {
    private MyClass ml = null;
    public MyClassCollection(int Size)
    {
    ml = new MyClass(Size);
    }
    public IEnumerator GetEnumerator()
    {
    return (IEnumerator)ml;
    }
    }

    调用:

     MyClassCollection cl = new MyClassCollection(10);
                foreach (var item in cl)
                {
                    Console.WriteLine(item);
                }

    结果:0到9

    个人理解:1.IEnumerable 只是用来被 循环调用。不能自己实现foreach,需要用GetEnumerator 将自己的成员。传给IEnumerator,进行循环。

    也就是 在foreach中 item 其实是 IEnumerator 中的返回的结果。

    2.必须知道的事  IEnumerable 必须实现  接口中 GetEnumerator方法。

    IEnumerator 实现  Current。MoveNext。Reset (不然会空引用)

    3.可以将IEnumerator和 IEnumerable 结合到一块。

    4. 可以不继承IEnumerable,但一定要实现 GetEnumerator方法。~!!!!!

    待续。。

  • 相关阅读:
    java架构师学习路线-HTTP请求类型及说明
    java架构师学习路线-关闭HTTP的TRACE方法
    AC自动机模板
    loj 2721 [NOI2018] 屠龙勇士
    scrum介绍
    本地搭建nacos集群
    js对象
    函数声明与表达式、匿名函数与具名函数、立即执行函数
    第六章 SSH远程服务介绍
    第十二章 配置vlan
  • 原文地址:https://www.cnblogs.com/shikyoh/p/2246456.html
Copyright © 2011-2022 走看看