【问题标题】:yield return does not work in callee methodyield return 在被调用方法中不起作用
【发布时间】:2017-12-19 00:59:30
【问题描述】:

我是 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 -&gt; enum1() -&gt; enum2(),但为什么yield returnenum2() 中不起作用?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 2020-12-06
      • 1970-01-01
      • 2012-03-26
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 2020-01-01
      相关资源
      最近更新 更多