10

我们客户的数据库以数组形式返回一组价格,但有时它们并不包括所有价格,即它们的数组中缺少元素。我们将找到的内容作为 IList 返回,这在我们从数据库中检索内容时效果很好。但是,我们很难将元素设置在数组中的正确位置。

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

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

4 回答 4

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 中的项目数,则将 item 附加到列表中。

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

于 2010-06-01T04:32:46.700 回答
7

使用IList.Insert 方法

于 2010-06-01T04:27:28.400 回答
3

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

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

这将为您提供一个包含 100 个项目的列表,全部为空。然后您可以自由地为 myList[3] 赋值。

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

于 2010-06-01T04:28:17.927 回答
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;

        }
于 2017-10-04T17:34:52.943 回答