zoukankan      html  css  js  c++  java
  • 对象枚举遍历实现二

    代码
         //可枚举对象并非必须实现IEnumerable接口。该职责可以委托给第三个类来实现。
         public class Persons
        {  
             
    string[] m_Names;
             
    public Persons(params string[] Names)
             {
                    m_Names 
    = new string[Names.Length];
                    Names.CopyTo(m_Names, 
    0);
             }
             
    private string this[int index]
             {
                 
    get { return m_Names[index]; }
                 
    set { m_Names[index] = value; }

             }
               
             
    private class PersonsEnumerator : IEnumerator
             {

               
                
    int index = -1;
                
                Persons p;
                
    public PersonsEnumerator(Persons p)
                {
                    
    this.p = p;
                }
                
    public bool MoveNext()
                {
                    index
    ++;
                    
    return index < p.m_Names.Length;
                }
                
    public void Reset()
                {
                    index 
    = -1;
                }
                
    public object Current
                {
                    
    get
                    {
                        
    return p.m_Names[index];
                    }
                }
             }
             
    private class PersonsEnumerable : IEnumerable
             {
                 
    private Persons m_persons;
                 
    internal PersonsEnumerable(Persons persons)
                 {
                     m_persons 
    = persons;
                 }
                 IEnumerator IEnumerable.GetEnumerator()
                 {
                     
    return new PersonsEnumerator(m_persons);
                 }


             }
             
    public IEnumerable InOrder
             {
                 
    get {   return new PersonsEnumerable(this); }
             }
             
    public IEnumerable Reverse
             {
                 
    get 
                 {
                     
    int length=this.m_Names.Length;
                     Persons persons
    = new Persons();
                     persons.m_Names 
    = new string[length];
                     
    for (int i = 0; i < length; i++)
                     {
                        
                         persons.m_Names[i] 
    = m_Names[length-i-1]; 
                     }
                     
    return new PersonsEnumerable(persons);

                 }
             }
            
        }
           实现代码:
           
    public  static void EnumObject()
            {
                Persons p 
    = new Persons("001","002","003");
                
    //正向输出
                foreach (string s in p.InOrder)
                {
                    Console.WriteLine(s);
                }
                
    //反序输出
                foreach (string s in p.Reverse)
                {
                    Console.WriteLine(s);
                }

            }
  • 相关阅读:
    3步轻松搞定Spring Boot缓存
    备战“金九银十”10道String高频面试题解析
    ConcurrentHashMap比其他并发集合的安全效率要高一些?
    3年java开发竟然还不知道Lambda的这个坑
    5分钟搞清楚Synchronized和Lock的概念与区别
    3年Java开发都知道的Redis数据结构和通用命令
    8月份21道最新Java面试题剖析(数据库+JVM+微服务+高并发)
    35个Java代码优化的细节,你知道几个?
    vba里面打开word文档,并实现通过特殊的字符将文档中的字符实现切分
    通过vba实现替换word里面指定的字符的方法
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706370.html
Copyright © 2011-2022 走看看