문제

업드안녕하세요, 아래 코드가 어떻게 작동하는지 알고 있습니다.나는 그 십자가를 알고,원은 십자가(),원()방법을 가리키고 있습니다.그러나 나는 여전히 코드의 이 부분에 약간의 혼란을 채우고 있습니다.당신은 나를 위해 그것을 설명 할 수?

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
{
    // ...
}

그리고 모든 루프 반복에서 반환 될 다음 요소는 내부 생성됩니다. Cross 또는 Circle 방법그 방법들은 한 번에 모두 실행되지 않습니다. yield return 문에 도달하면 프로그램 실행이 호출 코드( foreach 다음 항목이 필요할 때만 생성기 내부의 코드가 다시 시작됩니다.


추신:: 내 인터넷 연결이 몇 시간 동안 고장 전에,나는 또한 당신의 발전기를 통해 자신에 대한 참조를 반환 유지하는 이상한 사실에 대해 언급하고 싶었다 yield return.그건 정말 나에게 이해가되지 않습니다,솔직히 말해서;나는 그런 종류의 코드를 본 적이 없으며 실제로 유용한 것을하는지 궁금합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top