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数组去重
    js和jq实现全选反选
    js的作用域深入理解
    js对数组的常用操作
    如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码
    JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)
    通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录
    JAVA编程思想(第四版)学习笔记----11.10 Map
    JAVA中的for-each循环与迭代
    JAVA编程思想(第四版)学习笔记----11.5 List,11.6迭代器
  • 原文地址:https://www.cnblogs.com/jietian331/p/3133050.html
Copyright © 2011-2022 走看看