使用随机索引</t>将项目插入列表<t>

时间:2012-05-12 20:25:08

标签: c# .net

我有这段代码:

List<string> list = new List<string>(30);

list.Insert(1, "string 1");
list.Insert(10, "string 10");
list.Insert(5, "string 5");

运行时在sting 10上崩溃,异常索引必须在List的范围内

我能理解的是,我已经定义了一个包含30个项目的列表,那么为什么会崩溃,如果我不能以这种方式添加项目,那么定义30的重点是什么?

5 个答案:

答案 0 :(得分:5)

初始化时列表仍为空。参数“30”表示它只有30个项目的容量。

如果您坚持使用列表而不是数组,则必须首先添加30个项目,然后才能使用适当的索引设置它们。

最简单的方法是:

List<string> list = new string[30].ToList();

list[1] = "string 1";
list[10] = "string 10";
list[5] = "string 5";

另请注意,当您使用Insert时,它基本上会Add项目到某个索引,因此列表中的项目数量会增加。

答案 1 :(得分:2)

这一行:

List<string> list = new List<string>(30);

list初始化为30个项目的容量。它不会创建30个项目。

此时列表为空。您需要先添加 30个项目,然后您可以随机Insert,但您可以将这些项目按随机顺序排序,如the answer ivowiblo中所述

the answerYorye Nathan查看初始化包含30个项目的列表的方法(使用LINQ)。

答案 2 :(得分:0)

看看here。如您所见,insert方法使用列表的 count 变量而不是 capacity 。这意味着您可以在位置中插入元素,直到列表的当前计数,这是有效的元素数。

答案 3 :(得分:0)

保留内存可存储30个元素,但实际上您的列表在第一次插入之前为空,因此,插入一个元素后,列表中没有位置10。 / p>

答案 4 :(得分:0)

这样可以解决问题:

List<string> list = new List<string>();

list.Add("string 1");
list.Add("string 10");
list.Add("string 5");
var randomOrder = list.OrderBy(x => Guid.NewGuid());