为什么在将结果添加到列表时不执行方法调用?
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
返回的枚举器执行任何操作(更不用说其中的项目),因此永远不会执行枚举器。
当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
返回的枚举器执行任何操作(更不用说其中的项目),因此永远不会执行枚举器。