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);
      }
  • 相关阅读:
    js实现粘贴板复制
    oracle分页查询
    [小技巧]window10删除此电脑左侧栏中的非磁盘文件夹
    [web]2019第一起数据泄露事件
    [xml]AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'getroot'
    [python]Mongodb
    [urllib]urlretrieve在python3
    [flask]邮件配置-20171227
    [PowerShell]Python虚拟环境激活失败
    [git]git入门
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706368.html
Copyright © 2011-2022 走看看