实现类对象的枚举遍历

ExpandedBlockStart.gif 代码
/* -------------实现类对象的枚举遍历
 如果希望枚举一个可枚举对象(实现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);
  }

 

转载于:https://www.cnblogs.com/hubcarl/archive/2010/04/07/1706368.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值