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

奇怪的List.Remove方法
List<int> list = new List<int>() { 0,2,0};
list.Remove(list.LastOrDefault());  //删除最后一个元素
list.Add(4);
list.ForEach(s =>Console.WriteLine(s));


最后的输出结果为:2、0、4

删除最后一个元素,就是删除最后一个0吧,然后在加个4,元素顺序应该是0、2、4啊
怎么变成2、0、4了


求真相?
------最佳解决方案--------------------
用这个
 list.RemoveAt(list.Count - 1);


list.Remove(list.LastOrDefault());  先找到最后一个值,是0,然后从头查询,将第一个为0的删除
------其他解决方案--------------------
我告诉你为什么吧,因为list.Remove(list.LastOrDefault());中list.LastOrDefault()得到的是最后元素0,Remove方法的参数是int型,所以list.Remove(0)就把第一个值为0的元素删除了。这是int、string等这类特有的情况。
------其他解决方案--------------------
引用:
List<int> list = new List<int>() { 0,2,0};
list.Remove(list.LastOrDefault());  //删除最后一个元素
list.Add(4);
list.ForEach(s =>Console.WriteLine(s));


最后的输出结果为:2、0、4

删除最后一个元素,就是删除最后一个0……

原因主要是你第一个和最后一个都是0,所以会出现问题。
可以用
  List<int> list = new List<int>() { 0, 2, 0 };
            int m = list.LastOrDefault();
            list.RemoveAt(list.Count-1);  //删除最后一个元素
            list.Add(4);
            list.ForEach(s => Console.WriteLine(s));
------其他解决方案--------------------
list.LastOrDefault()返回值是0
list.Remove(0)删除了第一个0

好吧 给分
------其他解决方案--------------------
我擦楼上的楼上 强我生意啊
------其他解决方案--------------------
引用:
list.LastOrDefault()返回值是0
list.Remove(0)删除了第一个0

好吧 给分

可是,换成字符串,也是那样的啊

List<string> list = new List<string>() { "0","2","0"};
list.Remove(list.LastOrDefault());  //删除最后一个元素
list.Add("4");
list.ForEach(s =>Console.WriteLine(s));