一种跳来跳去的与迭代语法糖yield和迭代接口
private void button1_Click(object sender, EventArgs e)
{
A a = new A();
foreach (var i in a)
{
System.Console.WriteLine(" 执行主循环>>>");
}
}
class A : IEnumerable
{
private int[] array = new int[10];
public IEnumerator GetEnumerator()
{
//------------------------------------------
System.Console.WriteLine("初始化需要迭代的成员和数据,构造完毕后。");
System.Console.WriteLine(".....................算法。");
System.Console.WriteLine("开始迭代----");
for (int i = 0; i < 10; i++)
{
if (i > 8)
{
System.Console.WriteLine(i+ ":迭代出来GOTO-foreach,并且告诉没有数据了");
yield break;
}
else
{
System.Console.WriteLine(i + ":迭代出来GOTO-foreach,但是告诉还有GetNext。。。");
yield return array[i];
}
}
}
}
GOTO和接口进行的结果:
初始化需要迭代的成员和数据,构造完毕后。
.....................算法。
开始迭代----
0:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
1:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
2:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
3:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
4:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
5:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
6:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
7:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
8:迭代出来GOTO-foreach,但是告诉还有GetNext。。。
执行主循环>>>
9:迭代出来GOTO-foreach,并且告诉没有数据了
线程 0x2c84 已退出,返回值为 0 (0x0)。
线程 0x25b4 已退出,返回值为 259 (0x103)。