2017-07-14 17 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"; 
} 

あなたのコードは次のようになります。

関連する問題