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);
      }
  • 相关阅读:
    基本类型与引用类型
    局部变量与实例变量
    语句块
    i++与++i
    JAVA基本概念
    网线8根线的排列方式
    Docker容器常用命令
    内存cache使用的场景
    Python爬虫:Xpath语法笔记
    python实现简单的聊天
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706368.html
Copyright © 2011-2022 走看看