使用LINQ填充List<string>的方法

26
我想要用指定的次数来填充一个List<string>列表相同字符串值。
在纯C#中,代码如下:
List<string> myList = new List<string>();
for (int i = 0; i < 50; ++i)
{
    myList.Add("myString");
}

使用LINQ是否可能实现这个功能?


https://dev59.com/Vmox5IYBdhLWcg3wNBrS - sarwar026
4个回答

47

是的,使用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#0myString#1myString#2等。


1
@Lasse 非常详细的解释。非常感谢。 - Simon Linder
3
哇,看来我有充足的理由停止使用Enumerable.Range(0, qty).Select(n => "myString")了... :) - fjdumont

18

最适合这项工作的工具是Enumerable.Repeat

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

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

4

试试这个:

Enumerable.Range(0, 50).Select(i => "myString").ToList()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接