为什么将结果添加到列表时不执行方法调用?

问题描述 投票:1回答:1

[用Repeat(item, nr))res添加到res.Add(Repeat(item, nr))时,不执行Repeat方法。

为什么?我使用了调试器,但它不执行。

public class Program
{
    public static IEnumerable<IEnumerable<T>> Echo<T>(IEnumerable<T> src, int nr)
    {
        List<IEnumerable<T>> res = new List<IEnumerable<T>>();
        foreach (T item in src)
        {
            Console.Write(item);
            res.Add(Repeat(item, nr));
        }
        return res;
    }

    static IEnumerable<T> Repeat<T>(T item, int nr)
    {
        for (int i = 0; i < nr; i++)
        {
            Console.Write(item);
            yield return item;
        }
    }

    public static void Main()
    {
        string[] src = { "a", "b", "c" };
        Echo(src, 2);
    }

}
c# generics ienumerable iterable
1个回答
0
投票

使用yield return生成的枚举数直到被迭代后才会执行。因此,您需要有一些代码可以迭代添加到列表中的枚举器。由于您永远不会对Echo返回的枚举数执行任何操作(更不用说其中的项目了),因此永远不会执行该枚举数。

© www.soinside.com 2019 - 2024. All rights reserved.