[用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
返回的枚举数执行任何操作(更不用说其中的项目了),因此永远不会执行该枚举数。