2017-07-14 3 views
-2

Je suis nouveau en C# et voici mon code:retour de rendement ne fonctionne pas dans la méthode callee

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(); 
    } 
} 

attendu:

A 
B 
C 
A 
B 
C 

Mais Got:

C 
C 

Le appel trace est Main -> enum1() -> enum2() mais pourquoi yield return ne fonctionne pas dans enum2()?

Répondre

2

Vous ne faites rien avec les résultats de enum2. Vous créez l'itérateur, mais vous ne faites jamais d'itération de la collection.

Votre code devrait ressembler à:

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