Come svuotare un elenco in C #?


109

Voglio svuotare una lista. Come farlo?


34
Il tempo di risposta qui è più veloce di quanto sarebbe stato per leggere / cercare MSDN
V4Vendetta

27
Inoltre, la risposta è ora più facile da trovare qui rispetto a MSDN.
Matt Connolly

14
Per non parlare del fatto che se usi Google .net empty list, questa pagina viene prima di MSDN!
Vivian River

2
@ V4Vendetta Nel 2018, suggerirei che StackOverflow dovrebbe probabilmente creare un Bot che metta il tuo commento su qualsiasi thread che abbia un collegamento al documento MSDN nei commenti ...
scharette

Risposte:


234

È davvero facile:

myList.Clear();

3
... se la lista è in realtà un List<>, ArrayListo attrezzi IList. ;)
Lucero

3
@ Lucero viene chiamato come elenco se non è nessuno di questi?
Srinivas Reddy Thatiparthy

16
Dato che questo è un successo in Google e mi imbatto in questo problema, sto commentando questo necro. Se usi lo stesso elenco in un ciclo e usi clear, l'elenco spesso manterrà il riferimento a vecchi oggetti - spesso finisco per usare = new LisT <T> (); per il fatto che cancella immediatamente tutte le vecchie allocazioni. Per la maggior parte delle persone, però, .Clear (); sarà sufficiente, ma se trovi una lista che si comporta in modo strano, prova a usare = new List <T> () ;.
Charles

1
Ho intenzione di negarlo due volte perché qui sono state fornite alcune informazioni errate a partire dal 2020. List<T>.Clearcancella correttamente tutti i riferimenti che consente al GC di cancellare gli allochi quando necessario. new List<T>NON lo fa ed è inadatto a tutti gli scenari effettivamente
Giovanni

28

Se per "lista" intendi una List<T>, allora il metodo Clear è quello che vuoi:

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

Dovresti prendere l'abitudine di cercare nella documentazione MSDN su queste cose.

Ecco come cercare rapidamente la documentazione su vari bit di quel tipo:

Tutte queste query di Google elencano un insieme di link, ma in genere vuoi il primo che Google ti dà in ogni caso.


"Tutti questi elenchi un insieme di link, ma in genere si desidera il primo." A meno che tu non voglia svuotare l'elenco?
un CVn

Scusa, avrei dovuto essere più chiaro. Di solito vuoi il primo link che ti dà Google, non la "List Class".
Lasse V. Karlsen

9

Per dare una risposta alternativa (chi ha bisogno di 5 risposte uguali?):

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

Tieni presente che tutti gli altri riferimenti al vecchio elenco non sono stati cancellati (a seconda della situazione, questo potrebbe essere quello che desideri). Inoltre, in termini di prestazioni, di solito è un po 'più lento.


Puoi verificare che l'impostazione list = new List <> () sia effettivamente più lenta di list.Clear () ;? Secondo MSDN (collegamento sotto) list.Clear (); è un'operazione O (N) e non riesco a immaginare che l'istanza di un nuovo elenco richiederebbe più tempo. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris Tramel

5
DotNetPerls ha eseguito un benchmark e ha scoperto che il nuovo List <> è più veloce. dotnetperls.com/list-clear
Gerhard Powell

Per estensione, tieni anche presente che listha un nuovo riferimento. Quindi non usarlo se stai usando un lucchetto in quell'elenco.
jeromej

9

Opzione n. 1: utilizzare la funzione Clear () per svuotare List<T>e mantenere la sua capacità.

  • Count è impostato su 0 e vengono rilasciati anche i riferimenti ad altri oggetti dagli elementi della raccolta.

  • La capacità rimane invariata.

Opzione n. 2: utilizzare le funzioni Clear () e TrimExcess () per impostare List<T>lo stato iniziale.

  • Count è impostato su 0 e vengono rilasciati anche i riferimenti ad altri oggetti dagli elementi della raccolta.

  • Il taglio di un vuoto List<T>imposta la capacità dell'elenco sulla capacità predefinita.

definizioni

Count = numero di elementi che si trovano effettivamente nel fileList<T>

Capacità = numero totale di elementi che la struttura dati interna può contenere senza ridimensionamento.

Solo Clear ()

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

Clear () e 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

Puoi usare il metodo chiaro

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

4

Hai bisogno della funzione Clear () nell'elenco, in questo modo.

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

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

myList.Clear() // Our list is now empty
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.