2013-04-05 210 views
-5

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

+1

是不是指'列表'?你肯定需要插入,或只覆盖? – 2013-04-05 20:57:36

+0

使用'List '你不能只使用'Insert(index,item)'? – mattytommo 2013-04-05 20:59:09

+1

@mattytommo当然可以。它会抛出一个索引超出范围的异常,你可以编译它的错误。 – Servy 2013-04-05 21:04:28

回答

3

这可以用一个数组来轻松完成:

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

这也恰好实现IList接口。

+2

您不能将项目插入到数组中。您只能替换一个值。 – Servy 2013-04-08 13:50:20

+1

@Servy正如已经多次指出的那样,短语“在特定位置插入”显然是不明确的,并且意味着“覆盖”或“插入到插槽中”与其意味着“插入和推出”的链接列表。当你谈论在特定位置插入时,你通常打算让其他位置的物体保持放置而不是改变位置。 – RBarryYoung 2013-04-08 14:27:24

+0

如果你不打算任何其他对象改变位置,那么适当的术语将是“替换”或“覆盖”。不是“插入”。如果这是预期的意思,那么这不是该术语的适当使用。 – Servy 2013-04-08 14:33:02

0

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

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

容量为42

+0

我已经低估了。看到我的答案,你就会知道为什么。 – MarcinJuraszek 2013-04-05 21:05:46

+0

好的,我把这个问题看作是“填写清单时,我希望能够插入项目”而不是“我希望能够从头开始插入项目”(例如:add item 0,item 1,insert项目介于0和1之间),它与'List .Insert'一起使用# – pascalhein 2013-04-05 21:08:36

-1

List Constructor (Int32)

List.Insert Method

下声称插入失败选民创建一个列表。
您是否阅读过链接中的文档?
ArgumentOutOfRangeException如果index小于0 - 或 - index大于Count。
所以容量和数量是不一样的 - 不会让答案错误。
如果index小于0,则MarcinJuraszek的答案将抛出ArgumentOutOfRangeException - 或者 - index大于Count。
我在生产应用程序中正好使用这种方式来按字母顺序加载,然后在索引0处插入任何用户添加,并且它有从不引发异常。

9

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

无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; 
} 
+0

@MarcinJuraszek谢谢你的回答,但是到目前为止,这并不适用于我。这是我的。 '子场= CreateList (numOfComponents);' 'subFields.Insert(subField.segIndex,字段);' '抛出异常:System.NullReferenceException:对象不设置到object.' – Glimpse 2013-04-05 22:09:22

-1

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

但这里是你怎么做:

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

尺寸为int数据类型。

+1

的一个实例这将设置初始容量,而不是初始大小 – winwaed 2014-09-12 17:36:56