由于您不能直接使用 List 执行此操作,因此您可以使用辅助方法来生成生成器并使用 List(IEnumerable 集合) 重载。
class Program
{
static void Main(string[] args)
{
var list = new List<string>
(
Generator.New(() => new string('a', 5), 100)
);
list.ForEach((x) => Console.WriteLine(x));
}
}
public static class Generator
{
public static IEnumerable<T> New<T>(Func<T> generator, int nCount)
{
for (int i = 0; i < nCount; i++)
{
yield return generator();
}
}
public static IEnumerable<T> New<T>(Func<int,T> generator, int nCount)
{
for (int i = 0; i < nCount; i++)
{
yield return generator(i);
}
}
}
这确实有效,但如果 List 开箱即用地支持此功能,它就没有那么漂亮了。示例程序将打印由 5 个字符组成的 100 行。