2012-05-12 25 views
0

我有这样的代码:插入项目到列表<T>使用随机指标

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

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

运行时当机蜇10例外指数必须是列表

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

+0

看在创建列表后Count属性。它说什么? –

回答

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项目到一定指标,所以在列表中的项目数量将增长。

+0

我不知道你为什么要修改你的答案,并删除Enumerable.Range(0,blobItems.Count)。选择(X =>(串)空).ToList() –

+1

@RegisteredUser我想的做这件事的其他方式相信它更具可读性。 – SimpleVar

+1

他也可以用'新列表(新字符串[30])'列表'我想。但为什么不简单地使用数组? –

2

这条线:

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

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

此时的清单是空的。您需要先 30个项目,然后您可以Insert随机,但您可以将这些项目排序到一个随机顺序,如the answerivowiblo中所述。

请参阅the answer by Yorye Nathan以初始化包含30个项目的列表(使用LINQ)。

0

看看here。正如你所看到的插入方法使用列表中没有能力计数变量。这意味着您可以将元素插入到列表当前计数的位置,这是元素的有效数量。

0

保留内存30元,但实际上你的列表是空的之前先插入,因此,将一个元素出现在你的列表中没有位置后10。

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()); 
+0

不知道这是什么?为什么是GUID? –

+1

它会给你一个随机顺序的项目列表。 – ivowiblo

+0

对,如何升序字符串1,字符串5,字符串10? –