实现类对象的枚举遍历

复制代码
代码
/*-------------实现类对象的枚举遍历
 如果希望枚举一个可枚举对象(实现IEnumerable接口)的元素,就可以通过IEnumerable接口的GetEnumerator()
 * 方法从可枚举对象请求一个枚举器,接下来可以用枚举器的IEnumerator.MoveNext(),Reset,Current方法遍历。
 * public interface IEnumerable
 * {
 *    IEnumerator GetEnumerator();
 * }
 * public interface IEnumerator
 * {
 *    object Current{get;}
 *    bool MoveNext();
 *    void Reset();
 * }
 
*/
    
using System;
    
using System.Collections;

    
public class Person
    {
       
public Person(string fName, string lName)
       {
          
this.firstName = fName;
          
this.lastName = lName;
       }

       
public string firstName;
       
public string lastName;
    }

    
public class People : IEnumerable
    {
       
private Person[] _people;
       
public People(Person[] pArray)
       {
          _people 
= new Person[pArray.Length];

          
for (int i = 0; i < pArray.Length; i++)
          {
             _people[i] 
= pArray[i];
          }
       }

       
public IEnumerator GetEnumerator()
       {
          
return new PeopleEnum(_people);
       }
    }

    
public class PeopleEnum : IEnumerator
    {
       
public Person[] _people;
       
int position = -1;
       
public PeopleEnum(Person[] list)
       {
          _people 
= list;
       }

       
public bool MoveNext()
       {
          position
++;
          
return (position < _people.Length);
       }

       
public void Reset()
       {
          position 
= -1;
       }

       
public object Current
       {
          
get
          {
             
try
             {
                
return _people[position];
             }
             
catch (IndexOutOfRangeException)
             {
                
throw new InvalidOperationException();
             }
          }
       }
    }

   调用:
   
public static void ForeachDisplay()
   {
            Person[] peopleArray 
= new Person[3]
            {
                
new Person("John""Smith"),
                
new Person("Jim""Johnson"),
                
new Person("Sue""Rabon"),
            };

            People peopleList 
= new People(peopleArray);
            
foreach (Person p in peopleList)
                Console.WriteLine(p.firstName 
+ " " + p.lastName);
  }
复制代码

 

posted @   Blue Sky ......  阅读(284)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示