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

    }

    }

    }

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

  • 相关阅读:
    基于Docker搭建分布式消息队列Kafka
    [转]JAVA 开发环境设置(简单易懂)
    微信分享地址参数记录(出于防止微信刷票而产生的学习记录)
    万网开启二级站点【原创】
    PHP
    [转]什么是RSS
    html页面缓存(浏览器)
    [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON(),$.getScript(),$.load()的用法总结【转】
    JQuery中$.load()方法的用法和分析【转】
  • 原文地址:https://www.cnblogs.com/jietian331/p/3133050.html
Copyright © 2011-2022 走看看