學習集合和IEnumerable和IEnumerator接口。 我有以下程序。當我踏進使用yield return時GetEnumerator()方法會發生什麼?
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()
。 當我指定讓它以這種方式行事的產量時發生了什麼。該計劃的作品。
public IEnumerator<string> GetEnumerator()
{
Console.WriteLine("inside getenumerator");
yield return "First";
yield return "Second";
}
你的「前」代碼不編譯(你不能有'「測試」'從一個函數返回類型的IEnumerator''返回值) –
AakashM
@AakashM:更新的代碼。代碼之前只是檢查功能。我沒有真正使用返回值。我的問題清楚了嗎?我知道這有點棘手。 – ckv