我正在尝试在 C# 中创建动态数量的列表,但我不确定要写什么。这是我所拥有的:
List<List<ISpoolerObject>> writer = new List<List<ISpoolerObject>>();
for(int z=0; z < numPartitions; z++)
writer[z] = 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>());
}
您所拥有的将不起作用,因为您没有使用任何元素初始化列表列表。您必须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);
}
请注意,您将不得不处理在某个地方填充单个列表。