¿Cómo vaciar una lista en C #?

109

Quiero vaciar una lista. ¿Como hacer eso?

aceituna
fuente
34
El tiempo de respuesta aquí es más rápido de lo que hubiera sido para leer / buscar MSDN
V4Vendetta
27
Además, la respuesta ahora es más fácil de encontrar aquí que en MSDN.
Matt Connolly
14
Sin mencionar el hecho de que si busca en Google .net empty list, esta página aparece antes que MSDN.
Vivian River
2
@ V4Vendetta En 2018, sugeriría que Stackoverflow probablemente debería crear un Bot que puso sus comentarios sobre cualquier tema que tiene un enlace a MSDN doc en los comentarios ...
scharette

Respuestas:

234

Es muy facil:

myList.Clear();
Øyvind Bråthen
fuente
3
... si la lista es en realidad una List<>, ArrayListo implementos IList. ;)
Lucero
3
@Lucero ¿se llama como lista si no es ninguno de esos?
Srinivas Reddy Thatiparthy
16
Dado que este es un éxito en Google y me encuentro con este problema, estoy necro comentando esto. Si usa la misma lista en un bucle y usa clear, la lista a menudo mantendrá referencias a objetos antiguos - a menudo termino usando = new LisT <T> (); debido al hecho de que borra todas las asignaciones antiguas al instante. Sin embargo, para la mayoría de las personas, .Clear (); será suficiente, pero si encuentra una lista que actúa de manera extraña, intente usar = new List <T> () ;.
Charles
1
Voy a hacer doble comentario sobre esto porque se ha proporcionado información errónea aquí a partir de 2020. List<T>.Clearborra correctamente todas las referencias, lo que permite que el GC borre las asignaciones cuando sea necesario. new List<T>NO hace esto y es inadecuado en todos los escenarios de manera efectiva
Juan
28

Si por "lista" te refieres a a List<T>, entonces el método Clear es lo que quieres:

List<string> list = ...;
...
list.Clear();

Debería adquirir el hábito de buscar en la documentación de MSDN sobre estas cosas.

A continuación, se explica cómo buscar rápidamente documentación sobre varios bits de ese tipo:

Todas estas consultas de Google enumeran un paquete de enlaces, pero normalmente desea el primero que Google le ofrece en cada caso.

Lasse V. Karlsen
fuente
"Todos estos enumeran un conjunto de enlaces, pero normalmente desea el primero". ¿A menos que quieras vaciar la lista?
a CVn
Lo siento, debería haber sido más claro. Por lo general, desea el primer enlace que le brinda Google, no la "Clase de lista".
Lasse V. Karlsen
9

Para dar una respuesta alternativa (¿Quién necesita 5 respuestas iguales?):

list.Add(5); 
// list contains at least one element now
list = new List<int>();
// list in "list" is empty now

Tenga en cuenta que no se han borrado todas las demás referencias a la lista anterior (dependiendo de la situación, esto podría ser lo que desee). Además, en términos de rendimiento, suele ser un poco más lento.

Meinersbur
fuente
¿Puede verificar que la configuración list = new List <> () es en realidad más lenta que list.Clear () ;? Según lista de MSDN (enlace a continuación). Borrar (); es una operación O (N), y no puedo imaginar que crear una nueva lista lleve más tiempo que eso. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris Tramel
5
DotNetPerls hizo una evaluación comparativa y descubrió que la nueva Lista <> es más rápida. dotnetperls.com/list-clear
Gerhard Powell
Por extensión, también tenga en cuenta que listtiene una nueva referencia. Así que no uses eso si estás usando un candado en esa lista.
jeromej
9

Opción # 1: use la función Clear () para vaciar List<T>y retener su capacidad.

  • El recuento se establece en 0 y también se liberan las referencias a otros objetos de los elementos de la colección.

  • La capacidad permanece sin cambios.

Opción n. ° 2: use las funciones Clear () y TrimExcess () para establecer List<T>el estado inicial.

  • El recuento se establece en 0 y también se liberan las referencias a otros objetos de los elementos de la colección.

  • Recortar un vacío List<T>establece la capacidad de la lista en la capacidad predeterminada.

Definiciones

Count = número de elementos que están realmente en elList<T>

Capacidad = número total de elementos que la estructura de datos interna puede contener sin cambiar el tamaño.

Borrar () solamente

List<string> dinosaurs = new List<string>();    
dinosaurs.Add("Compsognathus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Deinonychus");
Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
dinosaurs.Clear();
Console.WriteLine("\nClear()");
Console.WriteLine("\nCount: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);

Borrar () y TrimExcess ()

List<string> dinosaurs = new List<string>();
dinosaurs.Add("Triceratops");
dinosaurs.Add("Stegosaurus");
Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
dinosaurs.Clear();
dinosaurs.TrimExcess();
Console.WriteLine("\nClear() and TrimExcess()");
Console.WriteLine("\nCount: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
WorkSmarter
fuente
5

usted puede hacer eso

var list = new List<string>();
list.Clear();
Kim Tranjan
fuente
5

Puedes usar el método claro

List<string> test = new List<string>();
test.Clear();
Swaff
fuente
4

Necesita la función Clear () en la lista, así.

List<object> myList = new List<object>();

myList.Add(new object()); // Add something to the list

myList.Clear() // Our list is now empty
Smallgods
fuente