yield return在callee方法中不起作用

时间:2017-07-14 03:46:53

标签: c# .net c#-2.0 yield-return

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

1 个答案:

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