如何使用C#在.Net中设置某个对象类型列表的初始大小,并能够在指定的索引处插入完全分配的对象?
答案 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)
声称插入失败的选民失败
您是否阅读了链接中的文档?
ArgumentOutOfRangeException如果index小于0 - 或者index大于Count
因此容量和数量不一样 - 不能使答案错误。
如果index小于0或者索引大于Count,MarcinJuraszek的答案将抛出ArgumentOutOfRangeException。
我在生产应用程序中使用这个按字母顺序加载,然后在索引0处插入任何用户添加,并且从不抛出异常。
答案 4 :(得分:-1)
据我所知,将列表的初始大小设置为与数组相比List背后的整个想法。
但这是你如何做到的:
List<ItemType> list = new List<ItemType>(size);
size是int数据类型。