读书人

移除list集合中某项的有关问题很郁闷

发布时间: 2013-03-01 18:33:02 作者: rapoo

移除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方法

读书人网 >asp.net

热点推荐