为什么插入列表方法而不覆盖指定索引上的项目?

时间:2015-12-09 17:01:08

标签: c#

要么我错过了一些非常明显的东西,要么就是问题。

List<>的插入方法在指定的索引上添加另一个项目但不覆盖它。

actionsIds.Insert(0, "item1");
actionsIds.Insert(1, "item2");
actionsIds.Insert(0, "item3");
MessageBox.Show(actionsIds.Count.ToString());

我得到数= 3 ..为什么不覆盖它或者它实际上不是为了这个目的?

2 个答案:

答案 0 :(得分:2)

Inserthttps://msdn.microsoft.com/en-us/library/sey5k5z4(v=vs.110).aspx)在指定的索引处添加新项,如果需要替换特定索引处的项,则应使用索引器属性(https://msdn.microsoft.com/en-us/library/0ebtbkkc(v=vs.110).aspx)。

actionsIds[0] = "item1";

以这种方式执行时,您需要确保索引存在,否则会导致异常。如果您不确定相关索引是否存在,可以通过检查Count来执行此操作。

if (index >= 0 && index < actionsIds.Count)
     actionsIds[index] = item;

如果索引不存在(使用elseAdd

,如果要插入列表,可以向上面添加Insert

答案 1 :(得分:1)

List&lt;&gt; .Insert用于将项目添加到给定位置的列表中。所以基本上它会进一步推送所有第1项“索引”,以便为你想要的项目创建一个位置

你的例子如下:

第1步:第1项

第2步:第1项 - 第2项

第3步:第3项 - 第1项 - 第2项

如果您的目标是替换给定位置,我建议您使用RemoveAt(索引),然后插入或使用它:

yourList[index] = "item2";

编辑:

如果该项目将首次添加,则表示您位于列表的末尾。话虽这么说,这段代码可以完成这项工作。

if(index <= yourList.Count)
{
    yourList[index] = "item2";
}
else
{
    //You can chose one of these
    yourList.Add("item2");          //1
    yourList.Insert(index,"item2"); //2
}