遍历数组或者集合时,之所以使用foreach可以实现,那是因为类中继承了IEnunerable接口,此接口可以重写IEnumerator类型的GetEnumerator()方法(此方法即得到一个枚举器),正是因为这个接口(方法)所以foreach才会起到遍历的作用
上代码:
namespace ForeachTest
{
public class Person : IEnumerable
{
private string[] m_love = new string[] { "理智", "林青霞", "李若彤", "刘亦菲" };
// 得到一个“枚举器”
public IEnumerator GetEnumerator()
{
for (int i = 0; i < m_love.Length; i++)
{
// 使用yield return语句可一次返回一个元素
// 通过 foreach 语句来使用迭代器方法。 foreach 循环的每次迭代都会调用迭代器方法。 迭代器方法运行到 yield return 语句时,会返回一个 expression,并保留当前在代码中的位置。 下次调用迭代器函数时,将从该位置重新开始执行。
yield return m_love[i];
}
}
}
}
main代码:
class Program
{
static void Main(string[] args)
{
Person person = new Person();
// 通过foreach来调用Person yield return出来的值
foreach(string item in person) // 这边可以根据return的值类型来写接收类型。本次return出来的是string
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
当然了,foreach迭代器的复杂度完全不止于此,我这只是最简单的认识。等日后了解的更深些了,再来更新。欢迎各位指正 不吝赐教哈