4

我有一个List<T>并且想从底部开始添加,但我得到了一个运行时IndexOutOfBoundsException

我已经初始化了一个容量列表:

List<ClassA> ClassesOfA = new List<ClassA>(10);
...
...
ClassesOfA[5] = classAObj;
...

有没有办法做到这一点?

我需要这样做,因为我正在从底部分析另一个列表并将结果添加到该列表中。所以我需要能够从底部添加。有没有办法做到这一点,而不是在添加我的对象之前初始化List<ClassA>withClassA对象?

4

4 回答 4

8

要将项目添加到列表中,您应该调用ClassesOfA.Add(). 以这种方式添加的任何项目都将添加到列表的末尾(不确定列表的开头或列表的结尾是您认为的底部)。

于 2013-04-24T14:42:51.220 回答
4

您可以尝试像这样添加元素:ClassesOfA.Add(classAObj),然后在添加所有列表元素后,您可以调用ClassesOfA.Reverse()以反转列表内对象的顺序。

于 2013-04-24T14:51:15.947 回答
1

如果您的第二个列表与您正在处理的第一个列表具有相同数量的元素,我认为您想要使用的只是一个数组,例如:

var myArray = new ClassA[listA.Count];
for (int i = 0; i < listA.Count; ++i) myArray[i] = Process(listA[i]);
于 2013-04-24T14:48:36.523 回答
1

或者,最好保留两个列表并在最后连接它们:

var firstList = new List<ClassA>(); 
var secondList = new List<ClassA>();

// Fill the lists.

return firstList.Concat(secondList).ToList(); // using System.Linq;


但是,如果您真的想走您建议的路线:

您需要根据需要添加尽可能多的空项目以“保留”空间:

var list = new List<ClassA>(10);
list.AddRange(new ClassA[5]);

// Or...
var list = Enumerable.Repeat<ClassA>(null, 5).ToList();

现在您可以继续Add从索引 5 开始的项目:

list.Add(new ClassA());

容量不会用尽可能多的项目预先填充列表。如果您想将前 5 个留空,这是我能看到的最好的。

添加将从此时将项目附加到列表的底部。我不完全确定您为什么要这样做。

于 2013-04-24T14:52:13.723 回答