24

我想List<string>用相同的字符串值填充 a 指定的次数。

在直接的 C# 中,它是:

List<string> myList = new List<string>();
for (int i = 0; i < 50; ++i)
{
    myList.Add("myString");
}

可以用 LINQ 做到这一点吗?

4

4 回答 4

45

是的,使用Enumerable.Repeat

var myList = Enumerable.Repeat("myString", 50).ToList();

或这个:

var myList = new List<string>(Enumerable.Repeat("myString", 50));

如果您有一个想要添加这些元素的现有列表,请使用以下命令:

myList.AddRange(Enumerable.Repeat("myString", 50));

请注意,这本身并不完全是 LINQ,但它使用与 LINQ 一起添加的扩展方法来支持新语法。使用LINQ(即“from ... select”语法),它有点不同,那么我会这样做:

var myList = (from idx in Enumerable.Range(0, 50) select "myString").ToList();

但是,我实际上不会这样做,而是使用Enumerable.

此外,如果您想创建不同的字符串,具体取决于您添加的是第一个、第二个、第三个等项目,您可以使用Enumerable.Range代替:

var myList = Enumerable.Range(0, 50).Select(idx => "myString#" + idx).ToList();

将创建一个包含字符串myString#0, myString#1, myString#2, ...的列表

于 2013-06-05T08:30:26.770 回答
18

这项工作的最佳工具是Enumerable.Repeat

var myList = Enumerable.Repeat("myString", 50).ToList();
于 2013-06-05T08:31:45.243 回答
9
var myList = Enumerable.Repeat("myString", 50).ToList();
于 2013-06-05T08:32:29.163 回答
4

试试这个:

Enumerable.Range(0, 50).Select(i => "myString").ToList()
于 2013-06-05T08:31:54.113 回答