在下面的代码中,我理解第二个初始化打印一个“外部”和三个“内部”。但是为什么第一个根本不打印,我希望它可以打印一个“外部”。

        DeferExecution a = new DeferExecution(); // prints nothing
        DeferExecution b = new DeferExecution(null); // print one "outside" and three "inside".

 class DeferExecution
{
    public IEnumerable<string> Input;

    public DeferExecution()
    {
        Input = GetIEnumerable();
    }

    public DeferExecution(string intput)
    {
        Input = GetIEnumerable().ToArray();
    }

    public IEnumerable<string> GetIEnumerable()
    {
        Console.WriteLine("outside");
        var strings = new string[] {"a", "b", "c"};
        foreach (var s in strings)
        {
            Console.WriteLine("inside");
            yield return s;
        }
    }
}

最佳答案

返回的可枚举实现为iterator block(即使用yield的方法)。

迭代器块中的代码直到第一次被枚举时才真正执行,因此,如果您实际上对IEnumerable不执行任何操作,则不会看到任何事情发生。

关于c# - 关于IEnumerable的延迟执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14531620/

10-11 02:11