• 枚举器小小总结


     

    一.IEnumerable、IEnumerable <T>接口

    C#中对于所有数组,集合都可以用foreach遍历,如:

    List<string> list=new List<string>();

    foreach(string str in list)

    {

        Console.WriteLine(str);

    }

    这是因为这些类都实现了IEnumerable或IEnumerable <T>接口。

    二.自己写的类,实现IEnumerable接口,用foreach来遍历

    public class Person:IEnumerable <string>

    {

        public Person()

        {

            _names=new string[]{“shadow”,”TianJie”,”Tom”,”Joly”};

        }

          private string[] _names;

        public IEnumerator<string> GetEnumerator()

        {

                  return new MyEnumerator(_names);

        }

    }

    public MyEnumerator:IEnumerator<string>

    {

             public MyEnumerator(string[] names)

    {

        this._names=names;

    }

    private string[] _names;

    private int _index=-1;

    public string Current

    {

        get

        {

            return _names[_index];

        }

    }

    public bool MoveNext()

    {

        return ++_index<this._names.Length;

    }

    public void Reset()

    {

        _index=-1;

    }

    public void Dispose()

    {

    }

    }

    于时,可用以下方法遍历Person类中的_names数组:

    Person p=new Person();

    foreach(string str in p)

    {

        Console.WriteLine(str);

    }

    它就相当于:

    Person p=new Person();

    MyEnumerator<string> etor=p.GetEnumerator();

    try

    {

        while(etor.MoveNext())

        {

                 Console.WriteLine(etor.Current);

        }

    }

    finally

    {

             etor.Dispose();

    }

    三.由于上述方法太过繁琐,也可以用yield关键字

    public class Person:IEnumerable <string>

    {

    public Person()

    {

        _names=new string[]{“shadow”,”TianJie”,”Tom”,”Joly”};

    }

             private string[] _names;

    public IEnumerator<string> GetEnumerator()

    {

                  for(int i=0;i<_names.Length;i++)

    {

        yield return _names[i];

    }

    }

    }

     当然,它本质上和第二条说的方法是一样的,通过反编译器就可以发现。

  • 相关阅读:
    【SpringBoot1.x】SpringBoot1.x 安全
    WebStorm快捷键(Mac版)
    iOS 容联离线消息推送
    iOS使用TestFlight进行内部和外部人员测试
    iOS Runtime常用方法整理
    模仿斗鱼直播
    一个很好用的侧滑框架ICSDrawerController实现的 QQ 侧滑及换肤功能
    swift3.0 项目引导页
    使用 swift3.0高仿新浪微博
    swift 监听键盘弹出的高度
  • 原文地址:https://www.cnblogs.com/jietian331/p/3133050.html
Copyright © 2020-2023  润新知