コレクションと 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";
}