zoukankan      html  css  js  c++  java
  • IEnumerable.GetEnumerator Method


    The following code example demonstrates the implementation of the IEnumerable interfaces for a custom collection. In this example, GetEnumerator is not explicitly called, but it is implemented to support the use of foreach (For Each in Visual Basic). This code example is part of a larger example for the IEnumerable interface.

     
    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];
            }
        }
    
        IEnumerator IEnumerable.GetEnumerator()
        {
           return (IEnumerator) GetEnumerator();
        }
    
        public PeopleEnum GetEnumerator()
        {
            return new PeopleEnum(_people);
        }
    }
    
    public class PeopleEnum : IEnumerator
    {
        public Person[] _people;
    
        // Enumerators are positioned before the first element 
        // until the first MoveNext() call. 
        int position = -1;
    
        public PeopleEnum(Person[] list)
        {
            _people = list;
        }
    
        public bool MoveNext()
        {
            position++;
            return (position < _people.Length);
        }
    
        public void Reset()
        {
            position = -1;
        }
    
        object IEnumerator.Current
        {
            get
            {
                return Current;
            }
        }
    
        public Person Current
        {
            get
            {
                try
                {
                    return _people[position];
                }
                catch (IndexOutOfRangeException)
                {
                    throw new InvalidOperationException();
                }
            }
        }
    }
    
    class App
    {
        static void Main()
        {
            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);
    
        }
    }
    
    /* This code produces output similar to the following:
     *
     * John Smith
     * Jim Johnson
     * Sue Rabon
     *
     */
  • 相关阅读:
    幂不等式
    一个对数级数的求和
    数列极限
    求幂级数的和函数
    证明整数为平方数
    java获取当前时间戳的方法
    《编程小白的第一本python入门书》笔记 二
    《编程小白的第一本python入门书》笔记 一
    python班级群中的问题记录-2016.12.30
    python班级群中的问题记录-2016.12.22
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2848607.html
Copyright © 2011-2022 走看看