首页 > 代码库 > C# 迭代器的使用例子
C# 迭代器的使用例子
一、使用数组做迭代,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() { //... } }
C# 迭代器的使用例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。