将IList项添加到特定索引号

时间:2010-06-01 04:23:24

标签: c# ilist

我们客户的数据库在数组中返回一组价格,但它们有时不包括所有价格,即它们的数组中缺少元素。我们返回我们发现的IList,当我们从数据库中检索内容时,它非常有用。但是,我们很难将元素设置在数组中的正确位置。

是否可以创建IList然后在IList中的特定位置添加元素?

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

4 个答案:

答案 0 :(得分:18)

使用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

如果index等于IList中的项目数,则将项目附加到列表中。

在连续元素(如列表)的集合中,插入点后面的元素向下移动以容纳新元素。如果集合已编制索引,则还会更新已移动元素的索引。此行为不适用于元素在概念上分组为存储区的集合,例如哈希表。

答案 1 :(得分:7)

答案 2 :(得分:3)

列表会动态增长以容纳添加的项目。您必须使用预定义的大小初始化列表。我能想到的最简单的方法是:

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

那将给你一个包含100个项目的列表,全部为空。然后,您可以自由地为myList [3]分配一个值。

请注意,在您的代码中,您尝试实例化IList<Model>这是不可能的 - 您需要一个具体类型(如List<Model>)而不是接口。

答案 3 :(得分: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;

        }