一、使用数组做迭代,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); } } }
二、由于一些必要的原因,不希望在类的外面直接操作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]; } } }
此时,对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() { //... } }
时间: 2024-12-12 06:40:56