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)
你需要围绕yield return:
public IEnumerable getdays()
{
while (days_idx < 6)
{
days_idx++;
yield return days[days_idx];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |