动态列表数

本文关键字:列表 动态 | 更新日期: 2023-09-27 18:07:18

我试图在c#中创建动态数量的列表,但我不确定该写什么。以下是我的文件:

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

我知道上面的部分是正确的,但是我只是不确定在new循环的右边应该放什么

动态列表数

您必须使用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();

您应该使用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();

如果你事先知道要在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>());
}

您所拥有的将不起作用,因为您没有使用任何元素初始化List of Lists。您必须为每个分区设置Add()所需的new List<ISpoolerObject>()

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

试着把它分解成多个步骤

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);
}