¿Cómo vaciar una lista en C #?


109

Quiero vaciar una lista. ¿Como hacer eso?


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();

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.


"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.


¿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);


5

Puedes usar el método claro

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.