yield return 的核心逻辑和继承两个接口实现其中的方法是一样的
迭代器是一种设计模式
yield return 只需要继承一个IEnumerable接口
1.先获取in后面这个对象的 IEnumerator,会调用对象其中的GetEnumerator方法 来获取
2.执行得到这个IEnumerator对象中的 MoveNext方法
3.只要MoveNext方法的返回值时true 就会去得到Current,然后复制给 item
cs
using System.Collections;
using System.Reflection;
class Program
{
public static void Main()
{
Mylist alist = new Mylist();
foreach (var item in alist)
{
Console.WriteLine(item);
}
}
}
class Mylist:IEnumerable,IEnumerator
{
char[] charArray;
int Cursor = -1;
public Mylist()
{
charArray = new char[] {'a','b','c','d','e'};
}
//public IEnumerator GetEnumerator()
//{
// for (int i = 0; i < charArray.Length; i++)
// {
// yield return charArray[i];
// }
//}
public object Current
{
get
{
return charArray[Cursor];
}
}
public IEnumerator GetEnumerator()
{
Reset();
return this;
}
public bool MoveNext()
{
Cursor++;
return (Cursor < charArray.Length);
}
public void Reset()
{
Cursor = -1;
}
}