我是C#的新手,这是我的代码:
class Program {
public static IEnumerable<string> enum2() {
yield return "A";
yield return "B";
}
public static IEnumerable<string> enum1() {
enum2();
yield return "C";
enum2();
yield return "C";
}
static void Main(string[] args) {
foreach (string s in enum1()) {
Console.WriteLine(s);
}
Console.ReadLine();
}
}
预期:
A
B
C
A
B
C
但得到了:
C
C
通话追踪为Main -> enum1() -> enum2()
,但为什么yield return
在enum2()
不起作用?
答案 0 :(得分:2)
你对enum2
的结果没有做任何事情。你正在创建迭代器,但从不迭代集合。
您的代码应如下所示:
public static IEnumerable<string> enum1()
{
foreach(var e in enum2())
yield return e;
yield return "C";
foreach(var e in enum2())
yield return e;
yield return "C";
}