C#使用yield关键字让自定义集合实现foreach遍历的方法
foreach遍历是C#常见的功能,而本文通过实例形式展现了C#使用yield关键字让自定义集合实现foreach遍历的方法。具体步骤如下:
一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口)
但是我们也可以通过使用yield关键字构建的迭代器方法来实现foreach的遍历,且自定义的集合不用实现IEnumerable接口
注意:虽然不用实现IEnumerable接口,但是迭代器的方法必须命名为GetEnumerator(),返回值也必须是IEnumerator类型。
实例代码以及简单注释说明如下:
classPerson
{
publicstringName;
publicvoidSayHi()
{
Console.WriteLine("Hello:{0}",this.Name);
}
}
//非常简单的自定义集合(--简单到增加,删除,索引器等功能都没有实现)该类没有实现IEnumerable接口
classPersonList
{
Person[]pers=newPerson[4];
publicPersonList()
{
pers[0]=newPerson(){Name="1"};
pers[1]=newPerson(){Name="2"};
pers[2]=newPerson(){Name="3"};
pers[3]=newPerson(){Name="4"};
}
//简单的迭代器方法
publicIEnumeratorGetEnumerator()
{
foreach(Personiteminpers)
{
//yieldreturn作用就是返回集合的一个元素,并移动到下一个元素上
yieldreturnitem;
}
}
}
classProgram
{
staticvoidMain(string[]args)
{
PersonListlist=newPersonList();
foreach(Personiteminlist)
{
item.SayHi();
}
Console.ReadLine();
}
}
感兴趣的读者可以动手测试一下本文实例代码,相信会有新的收获。