1

我正在尝试在 C# 中创建动态数量的列表,但我不确定要写什么。这是我所拥有的:

List<List<ISpoolerObject>> writer = new List<List<ISpoolerObject>>();

for(int z=0; z < numPartitions; z++)
    writer[z] = new;

我知道顶部是正确的,但我只是不确定在循环内新的右侧放置什么。

4

5 回答 5

3

您必须使用Add方法将新项目添加到List实例中:

List<List<ISpoolerObject>> writer = new List<List<ISpoolerObject>>(numPartitions);

for(int z = 0; z < numPartitions; z++)
{
    writer.Add(new List<ISpoolerObject>());
}

只是为了好玩 - 它也可以以不同的方式完成:

List<List<ISpoolerObject>> writer = Enumerable.Range(0, numPartitions).Select(x => new List<ISpoolerObject>()).ToList();
于 2013-04-02T19:14:22.080 回答
1

您应该使用Add方法将列表添加到writer.

for(int z=0; z < numPartitions; z++)
{
    writer.Add(new List<ISpoolerObject>());
}

或者你可以使用Range方法

List<List<ISpoolerObject>> writer = Enumerable.Range(0, numPartitions)
                                              .Select(i => new List<ISpoolerObject>())
                                              .ToList();
于 2013-04-02T19:14:23.820 回答
1

如果您提前知道要放入List<T>类型中的项目数,那么您应该使用接受容量的构造函数

List<List<ISpoolerObject>> writer = new List<List<ISpoolerObject>>(numPartitions);

这使得List<T>以后添加元素时效率更高。至于实际循环添加新元素使用Add方法

for(int z = 0; z < numPartitions; z++) {
  writer.Add(new List<ISpoolerObject>());
}
于 2013-04-02T19:16:28.627 回答
0

您所拥有的将不起作用,因为您没有使用任何元素初始化列表列表。您必须Add()new List<ISpoolerObject>()每个分区提供所需的内容。

List<List<ISpoolerObject>> writer = new List<List<ISpoolerObject>>();

for(int z = 0; z < numPartitions; z++)
{
    writer.Add(new List<ISpoolerObject>());
}
于 2013-04-02T19:14:43.277 回答
0

尝试将其分解为多个步骤

for (int z = 0; z < numPartitions; z++)
{
    // what do we want to add here?
    // a list of IspoolerObject.
    // so let's create that first.
    List<ISpoolerObject> aSingleList = new List<ISpoolerObject>();

    // now we add it to the list of lists
    writer.Add(aSingleList);
}

请注意,您将不得不处理在某个地方填充单个列表。

于 2013-04-02T19:15:05.740 回答