学习集合和 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";
}