日期:2014-05-17  浏览次数:20467 次

移除list集合中某项的问题,很郁闷的问题。求指教。谢谢
有这么个集合
List<string> li2 = new List<string> { "张三", "张三", "李四", "张三", "王五", "李四" };

然后

 li2.Remove(li2[3]);

现在集合中的值应该是

 List<string> li2 = new List<string> { "张三", "张三", "李四", "王五", "李四" };

可结果变成了这个

   List<string> li2 = new List<string> { "张三", "李四", "张三", "王五", "李四" };

这是为什么呢?难道当你删除指定某项时(li2.Removeli2[3]),

list会从第一个开始去找是否有你索引对应的值吗?

在li[3]索引前找到了就删除,当找到li[3]时,li[3]前面没有你的索引对应的值。。就在删除li[3]是吗
list

------解决方案--------------------
是的,你的li2.Remove(li2[3]);代码等价
li2.Remove("张三");,所以删除了第一个张三

如果li2里面是引用类型的对象,则li2.Remove(li2[3]);代码可以删除第三个对象,sting类型不行的,第一个"张三"==第三个"张三"
所以你想删除第三个张三,把你的代码改成
li2.RemoveAt(3); //直接删除第3个索引位置的值
------解决方案--------------------
结果没错
 li2.Remove(li2[3]);
li2[3]是表示张三,
Remove表示移除第一个匹配项,所以移除的是第一个张三
------解决方案--------------------
引用:
结果没错
 li2.Remove(li2[3]);
li2[3]是表示张三,
Remove表示移除第一个匹配项,所以移除的是第一个张三

你要移除指定索引的话,可以用RemoveAt方法