有谁知道为什么这个程序的输出是这样的?(在c#中使用迭代器)

Bab*_*abu 2 c# iterator c#-3.0

using System;
using System.Collections;
namespace Iterator_test
{
 class Day
 {
    int days_idx = -1;
    private String[] days = { "mon", "tue", "wed","thu","fri","sat","sun" };
    public IEnumerable getdays()
    {
        days_idx++;
        yield return days[days_idx];
    }
 }
 class Program
 {
    static void Main(string[] args)
    {
        Day d = new Day();
        foreach (string day in d.getdays())
        {
            Console.WriteLine(day);
        }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

实际上输出应该是,

mon
tue
wed
thu
fri
sat 
sun
Run Code Online (Sandbox Code Playgroud)

但它的打印只是"mon",

mon
Run Code Online (Sandbox Code Playgroud)

会是什么原因?

Luk*_*keH 12

发生这种情况是因为您的getdays方法中没有循环.你只有yield一次,返回第一项 - "星期一" - 就是这样!

这是一个简单的解决方案.(如果可能,也要将IEnumerable返回类型更改为IEnumerable<string>.)

public IEnumerable getdays()
{
    foreach (string day in days)
    {
        yield return day;
    }
}
Run Code Online (Sandbox Code Playgroud)


Fre*_*örk 7

你需要围绕yield return:

public IEnumerable getdays()
{    
    while (days_idx < 6)
    {
        days_idx++;
        yield return days[days_idx];
    }    
}
Run Code Online (Sandbox Code Playgroud)