yield return 在被调用方方法中不起作用

yield return does not work in callee method

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

您没有对 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";
}