奇怪的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等这类特有的情况。
------其他解决方案--------------------
原因主要是你第一个和最后一个都是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<string> list = new List<string>() { "0","2","0"};
list.Remove(list.LastOrDefault()); //删除最后一个元素
list.Add("4");
list.ForEach(s =>Console.WriteLine(s));