我有这段代码:
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的重点是什么?
答案 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 answer请Yorye 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());