/*
枚举迭代
如果需要foreach迭代的支持那就要实现接口IEnumerable的GetEnumerator方法
返回一个IEnumerable接口的枚举
该方法通过MoveNext方法和Current属性来迭代。
用yield语句轻松创建枚举器
*/
using System;
using System.Collections.Generic;
namespace Frank
{
public class Test
{
public static void Main(string[] args)
{
/*
IL不会把foreach解析为IL语言
C#中定义的foreach
foreach(Person p in persons)
{
System.Console.WriteLine(p)
}
IL解析后的代码段
IEnumerator<Person> enumerator = persons.GetEnumerator();
while(enumerator.MoverNext())
{
Person p = enumerator.Current;
System.Console.WriteLine(p);
}
*/
Test2 t = new Test2();
foreach(string item in t)
{
System.Console.WriteLine(item);
}
}
}
//自定义类实现foreach的支持
//其实要想自己的类支持迭代,只要有方法GetEnumerator返回IEnumerator即可
public class Test2
{
public IEnumerator<string> GetEnumerator()//迭代块
{
yield return "Hello";//返回一个字符串
yield return "World";//返回第二个字符串
// yield break;//停止迭代
}
}
}