对象枚举遍历实现二

代码
     //可枚举对象并非必须实现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);
            }

        }

 

posted @ 2010-04-07 15:19  Blue Sky ......  阅读(182)  评论(0编辑  收藏  举报