0

我有这个代码:

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

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

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

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

4

5 回答 5

5

初始化时列表仍为空。参数 '30' 意味着它将仅具有 30 个项目的容量。

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

最简单的方法是:

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

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

还要注意,当你在使用的时候Insert,它基本上会把Additem放到某个index,所以list中的item数量会增加。

于 2012-05-12T20:29:03.107 回答
3

这一行:

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

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

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

请参阅Yorye Nathan的答案,了解使用 30 项初始化列表的方法(使用 LINQ)。

于 2012-05-12T20:26:18.067 回答
0

看看这里。如您所见,插入方法使用列表的计数变量而不是容量。这意味着您可以在不超过列表当前计数的位置插入元素,这是元素的有效数量。

于 2012-05-12T20:29:17.090 回答
0

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

于 2012-05-12T20:29:35.953 回答
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());
于 2012-05-12T20:31:00.973 回答