如何从C#中的List <t>中删除一个对象并返回删除的对象?</t>

时间:2013-08-09 08:32:51

标签: c# .net list

如何从C#中的List<T>中删除对象并返回删除的对象?

RemoveAt是否会破坏对象? 我是否需要首先制作对象的深层副本,然后调用RemoveAt

3 个答案:

答案 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);
}
}