多次将一个项目添加到同一个列表中

San*_*der 17 c# collections

我想要实现的是将一个项添加到List,多次不使用循环.

我要在List中添加50个数字,并希望所有这些数字等于,比方说,42.我知道我可以简单地创建一个运行50次的小循环并一遍又一遍地添加相同的项目, 因此;

List<int> listFullOfInts = new List<int>();
int addThis = 42;
for(int i = 0; i < 50; i++)
    listFullOfInts.Add(addThis);
Run Code Online (Sandbox Code Playgroud)

我想要做的是有些事情;

listFullOfInts.AddRange(addThis, 50);
Run Code Online (Sandbox Code Playgroud)

或者至少与此类似的东西,也许使用Linq?我有一个模糊的记忆,看到如何做到这一点,但我无法找到它.有任何想法吗?

Tim*_*ter 43

你可以使用Repeat:

List<int> listFullOfInts = Enumerable.Repeat(42, 50).ToList();
Run Code Online (Sandbox Code Playgroud)

演示

如果您已有一个列表,并且您不想创建一个新列表ToList:

listFullOfInts.AddRange(Enumerable.Repeat(42, 50));
Run Code Online (Sandbox Code Playgroud)

  • +1也值得一提的是,引用类型会引用相同的实例,因此修改任何项目都会改变其他49 (4认同)
  • @DanPuzey有点难以绕过,但它不会弄乱我的代码:) (3认同)

Run*_* FS 5

您不能直接使用 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);
}
Run Code Online (Sandbox Code Playgroud)

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

listFullOfInts.AddRepeated(addThis, 50);
Run Code Online (Sandbox Code Playgroud)