2010-06-01 34 views
9

我們的客戶數據庫返回數組中的一組價格,但它們有時不包括所有價格,即它們在數組中缺少元素。我們將所發現的作爲IList返回,這在我們從數據庫檢索內容時效果很好。但是,我們在將元素設置在陣列中的適當位置時遇到困難。將IList項目添加到特定索引號

是否可以創建一個IList然後在IList中的特定位置添加一個元素?

var myList = new List<Model>(); 
var myModel = new Model(); 
myList[3] = myModel; // Something like what we would want to do 
+0

你的問題不是很清楚調整。我已經回答了你想問的問題,但是如果你能詳細闡述你想要做的事情,我可能會提供一個更好的答案。 – 2010-06-01 04:30:56

+0

我認爲答案是馬特和伊斯梅爾的組合。我想插入一個項目到位置3,但是還沒有列表中的任何內容。根據Matt的回答,我需要創建一個空列表,其中要插入count> index,然後需要使用Ismail的答案來實際插入它。另一個問題是插入會將所有東西推到上面,所以我幾乎需要在3之前創建任何缺失的條目,然後添加.Add()。那麼,至少這是我想要做的。 LOL – 2010-06-01 05:29:25

+0

你其實不想*插入它,是嗎?如果列表中有足夠的項目,您是不是隻想覆蓋特定元素上的那個?這就是「myList [3] = myModel;」確實。 – 2010-06-01 05:38:05

回答

3

列表動態增長以適應添加項目。你必須用預定義的大小初始化列表。我能想到的最簡單的方法是:

var myList = new Model[100].ToList(); 

這會給你一個包含100個項目的列表,全爲空。然後,您可以自由地爲myList分配一個值[3]。

請注意,在您的代碼中,您試圖實例化一個不可能的IList<Model> - 您需要一個具體類型(如List<Model>)而不是接口。

+0

我想要做的是在第三個位置貼一個新項目,但顯然列表需要連續,所以我需要在低於3的位置創建空白項目,然後插入一個新項目。 – 2010-06-01 05:32:08

+0

好的,所以我的回答是一種方法。使用空項目預填充列表(達到您認爲需要的最大數量),然後指定您想要的項目。 – 2010-06-01 05:36:59

17

使用IList<T>.Insert(int index,T item)

IList<string> mylist = new List<string>(15); 
mylist.Insert(0, "hello"); 
mylist.Insert(1, "world"); 
mylist.Insert(15, "batman"); // This will throw an exception. 

從MSDN

如果指數等於在IList中的項數,則項目追加到列表中。

在連續元素(如列表)的集合中,插入點後面的元素向下移動以適應新元素。如果集合被索引,那麼被移動元素的索引也會被更新。此行爲不適用於元素在概念上分組爲桶的集合,例如散列表。

0

它會插入,如果需要

public static IList<T> InsertR<T>(this IList<T> ilist, int index, T item) { 

     if (!(index < ilist.Count)) { 

      T[] array = Array.CreateInstance(typeof(T), index + 1) as T[]; 

      ilist.CopyTo(array, 0); 

      array[index] = item; 

      if (ilist.GetType().IsArray) { 
       ilist = array; 
      } else { 
       ilist = array.ToList(); 
      } 


     } else 
      ilist[index] = item; 

     return ilist; 

    } 

public static IList InsertR<T>(this IList ilist, int index, T item) { 

      if (!(index < ilist.Count)) { 

       T[] array = Array.CreateInstance(typeof(T), index + 1) as T[]; 

       ilist.CopyTo(array, 0); 

       array[index] = item; 

       if (ilist.GetType().IsArray) { 
        ilist = array; 
       } else { 
        ilist = array.ToList(); 
       } 


      } else 
       ilist[index] = item; 

      return ilist; 

     } 
相關問題