一、迭代器的介绍
迭代器大家可以想象成数据库的游标,即一个集合中的某个位置,C# 1.0中使用foreach语句实现了访问迭代器的内置支持,使用foreach使我们遍历集合更加容易(比使用for语句更加方便,并且也更加容易理解),foreach被编译后会调用GetEnumerator来返回一个迭代器,也就是一个集合中的初始位置(foreach其实也相当于是一个语法糖,把复杂的生成代码工作交给编译器去执行)。
二、迭代器的实现
namespace EventDemo
{
class Program
{
static void Main(string[] args)
{
Friends friendcollection = new Friends();
foreach (Friend f in friendcollection)
{
Console.WriteLine(f.Name);
}
Console.Read();
}
}
/// <summary>
/// 朋友类
/// </summary>
public class Friend
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public Friend(string name)
{
this.name = name;
}
}
/// <summary>
/// 朋友集合
/// </summary>
public class Friends : IEnumerable
{
private Friend[] friendarray;
public Friends()
{
friendarray = new Friend[]
{
new Friend("张三"),
new Friend("李四"),
new Friend("王五")
};
}
// 索引器
public Friend this[int index]
{
get { return friendarray[index]; }
}
public int Count
{
get { return friendarray.Length; }
}
// C# 2.0中简化迭代器的实现
public IEnumerator GetEnumerator()
{
for (int index = 0; index < friendarray.Length; index++)
{
// 这样就不需要额外定义一个FriendIterator迭代器来实现IEnumerator
// 在C# 2.0中只需要使用下面语句就可以实现一个迭代器
yield return friendarray[index];
}
}
}
}