質問
UPD。 こんにちは、 以下のコードがどのように機能しているかを知っています。私はその十字架を知っており、円は十字架()、そしてcircle()法を指していることを知っています。しかし、私はまだコードのこの部分とほとんど混同しています。私のためにそれを説明できますか?
public GameMoves()
{
cross = Cross();
circle = Circle();
}
.
すべてのコード
static void Main(string[] args)
{
GameMoves game = new GameMoves();
IEnumerator enumerator = game.Cross();
while (enumerator.MoveNext())
{
enumerator = (IEnumerator)enumerator.Current;
}
}
}
public class GameMoves
{
private IEnumerator cross;
private IEnumerator circle;
public GameMoves()
{
cross = Cross();
circle = Circle();
}
private int move = 0;
public IEnumerator Cross()
{
while (true)
{
Console.WriteLine("X, step {0}", move);
move++;
if (move > 9)
yield break;
yield return circle;
}
}
public IEnumerator Circle()
{
while (true)
{
Console.WriteLine("O, step {0}", move);
move++;
if (move > 9)
yield break;
yield return cross;
}
}
}
. 解決
Cross
とCircle
の両方が発生器です。それらは、object
によってIEnumerable
のシーケンスを返します。つまり、あなたは書くことができます:
foreach (var cross in Cross()) // works with Circle, also
{
// ...
}
.
およびループの繰り返しごとに、Next要素は、Cross
またはCircle
メソッド内で生成されます。これらのメソッドは一度に実行されません。
p.s.:私のインターネット接続が数時間破った前に、私はあなたの発電機がyield return
を介して自分自身への参照を返し続ける奇妙な事実についてコメントしたかった。それは私にとっては本当に理にかなっていない、正直に言う。私はそのようなコードを見たことがないと私は実際に何かが役に立つかどうか疑問に思う?
所属していません StackOverflow