【发布时间】:2013-08-01 09:56:23
【问题描述】:
学习集合和 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();
}
}
现在,如果我在相同 IEnumerator<string> name = sample.GetEnumerator(); 时替换 GetEnumerator 如下
被调用然后它不会进入函数。我希望它能够进入函数但不返回任何内容,因为我还没有调用movenext()。
当我指定让它以这种方式运行的 yield 时会发生什么。该程序有效。
public IEnumerator<string> GetEnumerator()
{
Console.WriteLine("inside getenumerator");
yield return "First";
yield return "Second";
}
【问题讨论】:
-
您的“之前”代码无法编译(您不能将
"Test"作为返回类型为IEnumerator<string>的函数的返回值) -
@AakashM:更新了代码。之前的代码只是为了检查功能。我并没有真正使用返回值。我的问题清楚吗。我知道这有点棘手。
标签: c# collections enumerator yield-return