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

    代码
    /*-------------实现类对象的枚举遍历
     如果希望枚举一个可枚举对象(实现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);
      }
  • 相关阅读:
    杨老师课堂_VBA学习教程之根据部门列创建工作表
    杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例
    杨老师课堂_Java核心技术下之控制台模拟记事本案例
    杨校老师课堂之JavaScript右下角广告弹框教程
    JavaScript的数组知识案例之随机点名器
    SET QUOTED_IDENTIFIER ON
    SET ANSI_NULLS ON
    OLEDB和ODBC的区别
    教你认识主板上的主要芯片
    递归和迭代有什么区别
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706368.html
Copyright © 2011-2022 走看看