4

コレクションと IEnumerable および IEnumerator インターフェイスについて学習します。私は以下のプログラムを持っています。に足を踏み入れると

IEnumerator<string> name = sample.GetEnumerator();

それはConsole.WriteLine("inside getenumerator");

class Program
    {
        static void Main(string[] args)
        {
            SampleStrings sample = new SampleStrings();
            IEnumerator<string> name = sample.GetEnumerator();
            foreach (var item in sample)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }
    }
    class SampleStrings : IEnumerable<string>
    {
        public IEnumerator<string> GetEnumerator()
        {
            Console.WriteLine("inside getenumerator");

            return null;//for testing purpose only
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return this.GetEnumerator();
        }
    }

同じものが呼び出されたときに GetEnumerator を以下のように置き換えるとIEnumerator<string> name = sample.GetEnumerator(); 、関数にステップインしません。関数にステップインすることを期待しますが、movenext()まだ呼び出していないため、何も返されません。このように動作させるyieldを指定するとどうなりますか。プログラムは動作します。

public IEnumerator<string> GetEnumerator()
        {
            Console.WriteLine("inside getenumerator");
            yield return "First";
            yield return "Second";

        }
4

1 に答える 1