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

Why isn't a method call executed when adding its result to a List?

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);
    }

}

使用 yield return 构建的枚举器在迭代之前不会执行。因此,您需要一些代码来迭代添加到列表中的枚举器。由于您从未对 Echo 返回的枚举器执行任何操作(更不用说其中的项目),因此永远不会执行枚举器。