2013-04-02 33 views
1

我想在C#中创建一个动态数量的列表,但我不确定要写什么。这里是我的:动态列表数

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

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

我知道顶部是正确的,但我不知道什么把新的权利在循环内。

回答

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

注意,你将不得不面对与地方填充各列表的道路。

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