1、对象只要一个类型实现了IEnumerable接口就能遍历
2、IEnumerator是枚举器,一个接口类,实现MoveNext->Current->Reset
3、yield关键字是一个迭代器,相当于实现了IEnumerator枚举器
4、IEnumerable是可枚举类型,IEnumerator是枚举器
public class IEnumerableShow {
public void Show() {
int[] array = { 1, 2, 3, 4, 5 };
Student student = new Student { Id = 1 };
foreach (var item in array) {
Console.WriteLine();
}
}
}
class Student:IEnumerable {
public int Id { get; set; }
public IEnumerator GetEnumerator() { //返回一个枚举器
//yield return "Ant编程1";
//yield return "Ant编程2";
//yield return "Ant编程3";
string[] student = { "Ant编程1", "Ant编程2", "Ant编程3" };
return new StudentEnumerator(student);
}
}
internal class StudentEnumerator : IEnumerator
{
string[] _student;
int _position = -1;
public StudentEnumerator(string[] student) {
this._student = student;
}
public object Current {
get {
if (_position == -1) {
throw new InvalidOperationException();
}
if (_position>=_student.Length) {
throw new InvalidOperationException();
}
return _student[_position];
}
}
public bool MoveNext()
{
if (_position<_student.Length-1) {
_position++;
return true;
}
else {
return false;
}
}
public void Reset()
{
_position = -1;
}
}
本文介绍了如何在C#中通过实现IEnumerable接口并使用yield关键字来创建可枚举类型。通过一个名为`IEnumerableShow`的示例类展示了如何遍历整数数组和自定义类型`Student`。`Student`类实现了`IEnumerable`接口,并返回一个`StudentEnumerator`枚举器,该枚举器使用yield关键字逐个返回字符串。总结了yield关键字作为迭代器的作用,以及IEnumerator接口的主要方法:MoveNext、Current和Reset。

2万+

被折叠的 条评论
为什么被折叠?



