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>100 個の空のオブジェクトを別の方法で (つまり、 a ではなく)使用したいだけの場合は、それらList<List<T>>を省略ToList()して自分で列挙します。

于 2013-11-08T23:12:20.140 に答える