1

我有以下列表:

List<List<BaseTile>> retVal = new List<List<BaseTile>>();

我需要用 100 个空List<BaseTile>s 填充它(然后我将用我需要的东西填充它们)

这样做的方法就是:

for (i=0; i<100; i++)
    retval.add(new List<BaseTile>());

我很确定有一些LINQ技巧可以在没有循环的情况下做到这一点,我很好奇它是什么。我试过:

retVal.AddRange(Enumerable.Repeat<List<BaseTile>>(new List<BaseTile>(),100));

但不幸的是它没有做我想要的,因为列表中的所有列表都引用了同一个列表(这很有意义,因为那是重复的含义:))

4

2 回答 2

6

我看了一眼

for(i=0;i<100;i++)
  retval.add(new List<BaseTile>());

并且马上就明白了

Enumerable.Range(1, 100).Select(_ => new List<T>())

不明显。

于 2013-11-08T23:17:46.150 回答
3

Enumerable.Range(1, 100)可以“伪造”一个for循环。然后你可以Select关闭结果IEnumerable<int>,忽略索引。

var result = Enumerable.Range(1, 100).Select(_ => new List<BaseTile>()).ToList();

如果您只是想以List<T>其他方式(即不在 a 中List<List<T>>)使用 100 个空对象,那么请自己省略ToList()并枚举它们。

于 2013-11-08T23:12:20.140 回答