30

我想要实现的是在不使用循环的情况下多次将一项添加到列表中。

我将向列表中添加 50 个数字,并希望所有这些数字都等于 42。我知道我可以简单地创建一个运行 50 次的小循环并一遍又一遍地添加相同的项目, 像这样;

List<int> listFullOfInts = new List<int>();
int addThis = 42;
for(int i = 0; i < 50; i++)
    listFullOfInts.Add(addThis);

我正在尝试做的事情是;

listFullOfInts.AddRange(addThis, 50);

或者至少与此类似的东西,也许使用Linq?我对如何执行此操作有模糊的记忆,但找不到。有任何想法吗?

4

2 回答 2

58

您可以使用Repeat

List<int> listFullOfInts = Enumerable.Repeat(42, 50).ToList();

演示

如果您已经有一个列表并且您不想使用以下命令创建一个新列表ToList

listFullOfInts.AddRange(Enumerable.Repeat(42, 50));

如果你想添加引用类型而不重复相同的引用,你可以使用Enumerable.Range+ Select

List<SomeClass> itemList = Enumerable.Range(0, 50)
    .Select(i => new SomeClass())
    .ToList();
于 2013-06-18T12:41:51.790 回答
4

您不能直接使用 LINQ 执行此操作,因为 LINQ 没有副作用,但您可以使用 System.linq 命名空间中的一些内容来构建所需的内容。

public static void AddRepeated<T>(this List<T> self,T item, int count){
  var temp = Enumerable.Repeat(item,count);
  self.AddRange(temp);
}

然后,您可以按照您在帖子中的建议使用它

listFullOfInts.AddRepeated(addThis, 50);
于 2013-06-18T12:48:23.253 回答