2017-07-14 28 views
-2

我在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 returnenum2()中不起作用?

回答

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"; 
}