设置列表初始大小

时间:2013-04-05 20:56:17

标签: c# .net arrays list

如何使用C#在.Net中设置某个对象类型列表的初始大小,并能够在指定的索引处插入完全分配的对象?

5 个答案:

答案 0 :(得分:14)

List<T>构造函数将int作为initiall列表容量的参数,但它实际上并没有在列表中创建那么多元素,所以这将抛出ArgumentOutOfRangeException

var items = new List<int>(10);
items[4] = 3;

您可以创建自己的方法来创建具有初始大小的List种类:

private static List<T> CreateList<T>(int capacity)
{
    return Enumerable.Repeat(default(T), capacity).ToList();
}

它会让它发挥作用:

var items = CreateList<int>(10);

items[4] = 3;

但是 - 当您知道所需的容量时,为什么不使用Array代替List

No-LINQ版本

private static List<T> CreateList<T>(int capacity)
{
    List<T> coll = new List<T>(capacity);
    for(int i = 0; i < capacity; i++)
        coll.Add(default(T));

    return coll;
}

答案 1 :(得分:2)

这可以通过数组轻松完成:

        string[] sa = new string[99];
        sa[71] = "g";

实现IList接口也会发生这种情况。

答案 2 :(得分:-1)

您可以使用构造函数重载List<T>(int capacity)

var l = new List<string>(42);

创建一个容量为42的列表。

答案 3 :(得分:-1)

List Constructor (Int32)

List.Insert Method

声称插入失败的选民失败 您是否阅读了链接中的文档?
ArgumentOutOfRangeException如果index小于0 - 或者index大于Count 因此容量和数量不一样 - 不能使答案错误。
如果index小于0或者索引大于Count,MarcinJuraszek的答案将抛出ArgumentOutOfRangeException。
我在生产应用程序中使用这个按字母顺序加载,然后在索引0处插入任何用户添加,并且从不抛出异常。

答案 4 :(得分:-1)

据我所知,将列表的初始大小设置为与数组相比List背后的整个想法。

但这是你如何做到的:

List<ItemType> list = new List<ItemType>(size); 

size是int数据类型。