如何从C#中的List<T>
中删除对象并返回删除的对象?
RemoveAt
是否会破坏对象?
我是否需要首先制作对象的深层副本,然后调用RemoveAt
?
答案 0 :(得分:11)
RemoveAt不会破坏对象,也不需要深层拷贝。
var result = list[i];
list.RemoveAt(i);
return result;
RemoveAt
是O( n - i )vs Remove
,即O( n )(其中) n 是长度, i 是要删除的元素的索引。删除元素后,必须将其后的所有元素都移除。
根据此文档,如果您想要以最高效的方式删除元素,请将其与last,element交换,然后将其删除。这不保持如上所述的顺序。从理论上讲,这意味着删除列表的最后一个元素是O(1)。
var result = list[i];
list[i] = list[list.Length-1];
list.RemoveAt(list.Length-1);
return result;
答案 1 :(得分:7)
你可以这样做:
var listObject = list.ElementAt(index);
list.Remove(listObject);
答案 2 :(得分:-3)
我很抱歉我误解了这个问题。
这是我的答案,你应该使用功能。
public xxxx sss(List s,var i)
{
try
{
var result = s.ElementAt(i);
s.Remove(result);
}
catch(Exception e)
{
Console.WriteLine(e.message);
}
}