迭代器是C#2.0中新增的功能
迭代器是一种方法、get访问器或运算符,使得开发人员能在类或结构中支持foreach迭代,而不必实现实现整个 IEnumerator接口
[MSDN]
当编译器检测到迭代器时,它将自动生成 IEnumerator 或 IEnumerator<T>接口的 Current、MoveNext 和 Dispose 方法
迭代器特点:
迭代器是可以返回相同类型的值的有序序列的一段代码。
迭代器可用作方法、运算符或 get 访问器的代码体。
迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。
可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用
迭代器的返回类型必须为
IEnumeable ,IEnumerator,IEnumeable <T>,IEnumerator<T>
实现代码:
class StudentList
{
string student1 = "甲";
string student2 = "乙";
string student3 = "丙";
string student4 = "丁";
string student5 = "戊";
public string Student1
{
get
{
return student1;
}
set
{
student1 = value;
}
}
public string Student2
{
get
{
return student2;
}
set
{
student2 = value;
}
}
public string Student3
{
get
{
return student3;
}
set
{
student3 = value;
}
}
public string Student4
{
get
{
return student4;
}
set
{
student4 = value;
}
}
public string Student5
{
get
{
return student5;
}
set
{
student5 = value;
}
}
//编写该类的迭代器(实现System.Collections.IEnumerator 接口)
public System.Collections.IEnumerator GetEnumerator()
{
//通过for循环对StudentList类中的5个string类型变量进行处理
for(int i=0;i<5;i++)
{
switch (i)
{
case 0:
yield return student1;
break;
case 1:
yield return student2;
break;
case 2:
yield return student3;
break;
case 3:
yield return student4;
break;
case 4:
yield return student5;
break;
}
}
}
}
在main函数中:
//通过foreach使用迭代器获得StudentList对象中的字段值
StudentList myStudentList = new StudentList();
foreach (object student in myStudentList)
{
Console.WriteLine(student.ToString());
}