我正在尝试
var test = new List< int>(10);
test.Insert(1, 0);
or
test[1] =0;
我对此感到异常。
如何插入列表?
由于 空间可以让这个编辑器正确显示事物。
答案 0 :(得分:13)
var test = new List<int>(10);
test.Add(1);
或
var test = new List<int>(10);
test.Insert(0, 1) // inserts the value in the first position
<强>更新强>
我错过了你原来的意图。要做你想做的事,你只需要用初始值初始化列表中的每个位置。不那么建议的方式是:
//var test = new List<int>(10){0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
var test = new List<int>(10);
test.AddRange(Enumerable.Repeat(0, 10)); // Thanks to Ahmad
test[3] = 10; // works now
答案 1 :(得分:5)
在重新分配之前,您正在分配一个容纳10个项目的空列表。然后你插入它的中间。这就是它失败的原因。
修改的
你似乎认为它就像一个数组,它实际上分配了十个插槽开始。不是。如果你想要十个插槽,你需要自己添加它们。一旦你这样做,就可以在中间引用位置。
答案 2 :(得分:2)
假设您要创建10个整数的列表并将值设置为1.您可以
var test = Enumerable.Repeat<int>(0, 10).ToList();
test[1] = 0;
这将创建一个10个整数的列表(全部等于0),然后将索引1的值设置为0.显然,当列表初始化为0时,第二行是不必要的。
答案 3 :(得分:1)
感谢所有答案。
我的清单是
var x = new List<ISomeInterface>(10);
我不能在界面上重复,我不知道它是什么对象。因为它非常通用。
我使用的解决方案:
var x = new ISomeInterface[10];
x.ToList();
答案 4 :(得分:0)
列表构造函数的整数参数定义列表的容量,这意味着列表可以最多容纳多少个元素。在您对列表进行实例化后,它是空的并且能够保存10个值(尽管我不确定10是否不仅仅是初始容量,它将根据需要增长)。无论如何,当你试图插入位置1(第二个元素)时,你会得到一个例外,因为列表中不包含任何元素。
我认为你喜欢使用的是一个数组:
int[] integers = new int[10]; // Creates an array which holds 10 values,
// initially all values are zero.
integers[1] = 123; // Modifiy the value at index 1.
最诚挚的问候 Oliver Hanappi
答案 5 :(得分:0)
在添加足够的元素以使列表至少达到那么大之前,您无法插入到某个位置。这在List's Insert documentation:
中有明确记录在以下情况下可以抛出ArgumentOutOfRangeException:
如果您只是想设置特定元素,可以添加所有10个元素,然后使用索引器:
test[1] = 0;
否则,您可以添加元素,然后插入:
test.Add(0); // Now the list has an element
test.Insert(1,0); // Insert into element 1...