我有一个List<T>
,想要从底部开始添加,但我得到了一个运行时IndexOutOfBoundsException
。
我已经初始化了一个容量列表:
List<ClassA> ClassesOfA = new List<ClassA>(10);
...
...
ClassesOfA[5] = classAObj;
...
有没有这样做?
我需要这样做,因为我正在从底部分析另一个列表并将结果添加到此列表中。所以我需要能够从底部添加。
有没有办法做到这一点,而不是在添加对象之前用List<ClassA>
对象初始化{?1}}?
答案 0 :(得分:7)
要将项目添加到列表,您应该调用ClassesOfA.Add()
。以这种方式添加的任何项目都将添加到列表的末尾(不确定列表的开头或列表的末尾是否是您认为的最低点)。
答案 1 :(得分:3)
您可以尝试添加如下所示的元素:ClassesOfA.Add(classAObj)
,然后添加所有列表元素后,您可以调用ClassesOfA.Reverse()
来反转列表中对象的顺序。
答案 2 :(得分:1)
如果您的第二个列表与您正在处理的第一个列表具有相同数量的元素,我认为您想要使用的只是一个数组:
var myArray = new ClassA[listA.Count];
for (int i = 0; i < listA.Count; ++i) myArray[i] = Process(listA[i]);
答案 3 :(得分: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();
现在,您可以从索引5开始继续Add
个项目:
list.Add(new ClassA());
容量不会使用尽可能多的项目预先填充列表。如果你想把前5个留空,这是我能看到的最好的。
添加会从此处将项目附加到列表底部。我不完全确定你为什么要这样做。