1.举例
-------------类定义--------------
public class GameMoves
{
private int move = 0;
const int MaxMoves = 9;
private System.Collections.IEnumerator cross;
private System.Collections.IEnumerator circle;
public GameMoves()
{
cross = Cross();
circle = Circle();
}
public System.Collections.IEnumerator Cross()
{
while (true)
{
Console.WriteLine("Cross move {0}", move);
if (++move > MaxMoves)
{
yield break;
}
yield return circle;
}
}
public System.Collections.IEnumerator Circle()
{
while (true)
{
Console.WriteLine("Circle move {0}", move);
if (++move > MaxMoves)
{
yield break;
}
yield return cross;
}
}
}
-------------测试代码--------------
private void button1_Click(object sender, EventArgs e)
{
var game = new GameMoves();
System.Collections.IEnumerator enumerator = game.Cross();
while (enumerator.MoveNext())
{
//这句代码的作用是交替执行,取消该行,将不会交替执行
enumerator = enumerator.Current as System.Collections.IEnumerator;
}
}
--------------测试结果----------------
分析:
在while循环中,调用enumerator.MoveNext()。第一次调用enumerator.MoveNext()时,会调用Cross()方法,
Cross()方法是用yield语句返回另一个枚举器,这样下次将会执行Circle()方法,两个方法交替执行,直到
move>9后停止