zoukankan      html  css  js  c++  java
  • 枚举器小小总结

     

    一.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];

    }

    }

    }

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

  • 相关阅读:
    js数组去重五种方法
    wm_concat 多行字符串拼接
    ORACLE WITH AS 简单用法
    layui laytpl 语法
    看懂Oracle执行计划
    GIT RM -R --CACHED 去掉已经托管在GIT上的文件
    sourceTree使用教程--拉取、获取
    SourceTree忽略文件和文件夹
    layui table 详细讲解
    利用POI实现下拉框级联
  • 原文地址:https://www.cnblogs.com/jietian331/p/3133050.html
Copyright © 2011-2022 走看看