C# 迭代器的使用例子

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   ar   os   使用   for   

一、使用數組做迭代,foreach (Person p in people.Persons),如下:

using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;namespace IEnumerableTest{    class Program    {        static void Main(string[] args)        {            Person[] persons = new Person[4]            {                new Person("John","Smith", 18, true),                 new Person("Kite", "Green", 16, false),                new Person("Lei", "Li", 17, true),                new Person("Meimei", "Han", 15, false)            };            People people = new People(persons);            foreach (Person p in people.Persons)            {                Console.WriteLine(p.ToString());            }        }    }    public class People    {        private Person[] _persons;        public Person[] Persons        {            get { return _persons; }            set { _persons = value; }        }        public People(Person[] persons)        {            this.Persons = persons;        }    }    public class Person    {        public Person(string firstName, string lastName, int age, bool gender)        {            this.FirstName = firstName;            this.LastName = lastName;            this.Age = age;            this.Gender = gender;        }        private string _firstName;        public string FirstName        {            get { return _firstName; }            set { _firstName = value; }        }        private string _lastName;        public string LastName        {            get { return _lastName; }            set { _lastName = value; }        }        private int _age;        public int Age        {            get { return _age; }            set { _age = value; }        }        private bool _gender;        public bool Gender        {            get { return _gender; }            set { _gender = value; }        }        public override string ToString()        {            string gender = string.Empty;            if (this.Gender)                gender = "male";            else                gender = "female";            return string.Format("{0} {1}, {2}, is {3} years old.", this.FirstName, this.LastName, gender, this.Age);        }    }}
View Code

二、由於一些必要的原因,不希望在類的外面直接操作people.Persons,則對類People改造如下:

    public class People    {        private Person[] _persons;        public People(Person[] persons)        {            this._persons = new Person[persons.Length];            for (int i = 0; i < persons.Length; i++)            {                _persons[i] = persons[i];            }        }    }
View Code

此時,對people.Persons進行遍曆是不可能的。可是,我們仍然有對Persons進行遍曆的需求。

怎麼辦?繼續改造類People,讓我們可以直接對類People進行遍曆:foreach (Person p in people)

怎麼改造?添加迭代器。

三、添加迭代器

1.繼承IEnumerable

2.添加方法

IEnumerator IEnumerable.GetEnumerator()    {       ...    }

如下:

    public class People : IEnumerable    {        private Person[] _persons;        public People(Person[] persons)        {            this._persons = new Person[persons.Length];            for (int i = 0; i < persons.Length; i++)            {                _persons[i] = persons[i];            }        }        IEnumerator IEnumerable.GetEnumerator()        {            //...        }    }
View Code

 

C# 迭代器的使用例子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.