• 实现类对象的枚举遍历


    代码
    /*-------------实现类对象的枚举遍历
     如果希望枚举一个可枚举对象(实现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);
      }
  • 相关阅读:
    一句话解释数字签名。一句话解释数字证书
    KVC、KVO实现过程
    SSH基本概念和用途
    UICollectionView左对齐流水布局、右对齐流水布局
    Git命令学习笔记
    Xcode8插件安装
    Xcode日常使用
    dispatch_group_t 日常使用注意事项
    二分查找变种
    maven插件调试方法
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706368.html
Copyright © 2020-2023  润新知