2013-04-05 255 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