zoukankan      html  css  js  c++  java
  • IEnumerable、GetEnumerator、IEnumerator的理解

    概念文字性的东西,我们就不说了,这里我们来点具体的实例第呀;

    实例一:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Pratice001
    {
       public  class Test:IEnumerable
        {
            private static int count = 12;
            private string[] elements;
            private int ctr = 0; //数组下标的计数器;
    
            public Test(params string[] initialString)
            {
                elements = new String[8];
                foreach (string s in initialString)
                {
                    elements[ctr++] = s; //数据初始化
                }
            }
           public  Test(string initialString, char[] delimiters)
            {
                elements = initialString.Split(delimiters); //不同的方式 进行初始化;
            }
    
            //实现接口中的方法;
            public IEnumerator GetEnumerator()
            {
                return new ForeachTestEnumerator(this);
            }
    
            public class ForeachTestEnumerator : IEnumerator
            {
                private int position = -1;
                private Test t;
                public ForeachTestEnumerator(Test t)
                {
                    this.t = t;
                }
    
                //实现接口;
                public object Current
                {
                    get
                    {
                        return t.elements[position];
                    }
                }
    
                public bool MoveNext()
                {
                    if (position < t.elements.Length - 1)
                    {
                        position++;
                        return true;
                    }
                    else
                    {
                       return  false;
                    }
                }
    
                public void Reset()
                {
                    position = -1;
                }
    
    
            }
    
        }
    
    
    }

    实例二:

    然后我们再来一个实例!

    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);
    
        }
    }
    
    

    最好,跟代码,一步步的调试出来看看的呀;

  • 相关阅读:
    Junit单元测试
    团队作业1——团队展示&教辅宝
    结对编程加强版四则运算器
    APP分析之海豚睡眠
    作业1--四则运算
    软件工程-pair work[附加题]
    现代程序设计 homework-02
    《软件工程》individual project开发小记(一)
    现代程序设计 homework-01
    《现代程序设计》9.9日课后总结
  • 原文地址:https://www.cnblogs.com/mc67/p/5955902.html
Copyright © 2011-2022 走看看