有这么个集合
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

解决方案 »

  1.   

    是的,你的li2.Remove(li2[3]);代码等价
    li2.Remove("张三");,所以删除了第一个张三如果li2里面是引用类型的对象,则li2.Remove(li2[3]);代码可以删除第三个对象,sting类型不行的,第一个"张三"==第三个"张三"
    所以你想删除第三个张三,把你的代码改成
    li2.RemoveAt(3); //直接删除第3个索引位置的值
      

  2.   

    结果没错
     li2.Remove(li2[3]);
    li2[3]是表示张三,
    Remove表示移除第一个匹配项,所以移除的是第一个张三
      

  3.   

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