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
     *
     */
  • 相关阅读:
    有关获取session属性时报nullPointException(空指针异常)的解决方案
    常用的正则表达式集锦
    使用java实现持续移动的小球
    Java基础系列--包装类
    java中关于类的封装与继承,this、super关键字的使用
    简单了解static
    【01】npm/cnpm安装
    【转】Nodejs学习笔记(二)--- 模块
    【转】Nodejs学习笔记(一)--- 简介及安装Node.js开发环境
    【转】axios的基本使用
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2848607.html
Copyright © 2011-2022 走看看