Como esvaziar uma lista em C #?


109

Eu quero esvaziar uma lista. Como fazer isso?


34
O tempo de resposta aqui é mais rápido do que teria sido para ler / pesquisar no MSDN
V4Vendetta

27
Além disso, a resposta agora é mais fácil de encontrar aqui do que no MSDN.
Matt Connolly,

14
Sem mencionar o fato de que, se você pesquisar no Google .net empty list, esta página aparecerá antes do MSDN!
Vivian River

2
@ V4Vendetta Em 2018, eu sugeriria que StackOverflow deveria provavelmente criar um Bot que colocasse seu comentário em qualquer tópico que tenha um link para o documento do MSDN nos comentários ...
scharette

Respostas:


234

É muito fácil:

myList.Clear();

3
... se a lista é realmente um List<>, ArrayListou implementos IList. ;)
Lucero

3
@Lucero é chamado como uma lista se não for nenhum dos dois?
Srinivas Reddy Thatiparthy,

16
Uma vez que este é um dos principais sucessos do google e me deparo com esse problema, estou necro comentando isso. Se você usar a mesma lista em um loop e limpar, a lista geralmente manterá a referência a objetos antigos - frequentemente acabo usando = new LisT <T> (); devido ao fato de que ele limpa todas as alocações antigas instantaneamente. Para a maioria das pessoas, entretanto, .Clear (); será suficiente, mas se você encontrar uma lista agindo estranhamente - tente usar = new List <T> () ;.
Charles

1
Vou dobrar o necrocommentar isso porque alguma desinformação foi fornecida aqui a partir de 2020. List<T>.Clearapaga adequadamente todas as referências, o que permite ao GC limpar as alocações quando necessário. new List<T>NÃO faz isso e é inadequado em todos os cenários de forma eficaz
João

28

Se por "lista" você quer dizer um List<T>, então o método Clear é o que você deseja:

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

Você deve adquirir o hábito de pesquisar a documentação do MSDN sobre essas coisas.

Veja como pesquisar rapidamente por documentação sobre vários bits desse tipo:

Todas essas consultas do Google listam um pacote de links, mas normalmente você quer o primeiro que o google fornece em cada caso.


"Todas essas listas são um pacote de links, mas normalmente você quer o primeiro." A menos que você queira esvaziar a lista?
um CVn

Desculpe, eu deveria ter sido mais claro. Você normalmente deseja o primeiro link que o Google fornece, não a "Lista de classes".
Lasse V. Karlsen,

9

Para dar uma resposta alternativa (quem precisa de 5 respostas iguais?):

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

Lembre-se de que todas as outras referências à lista antiga não foram apagadas (dependendo da situação, pode ser o que você deseja). Além disso, em termos de desempenho, geralmente é um pouco mais lento.


Você pode verificar se a configuração list = new List <> () é realmente mais lenta do que list.Clear () ;? De acordo com o MSDN (link abaixo) list.Clear (); é uma operação O (N), e não consigo imaginar instanciar uma nova lista demoraria mais do que isso. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris

5
DotNetPerls fez um benchmark e descobriu que o novo List <> é mais rápido. dotnetperls.com/list-clear
Gerhard Powell

Por extensão, lembre-se também de que listtem uma nova referência. Portanto, não use isso se estiver usando um cadeado nessa lista.
jeromej

9

Opção nº 1: Use a função Clear () para esvaziar List<T>e reter sua capacidade.

  • A contagem é definida como 0 e as referências a outros objetos de elementos da coleção também são liberadas.

  • A capacidade permanece inalterada.

Opção # 2 - Use as funções Clear () e TrimExcess () para definir List<T>o estado inicial.

  • A contagem é definida como 0 e as referências a outros objetos de elementos da coleção também são liberadas.

  • Cortar um vazio List<T>define a capacidade da Lista para a capacidade padrão.

Definições

Contagem = número de elementos que estão realmente noList<T>

Capacidade = número total de elementos que a estrutura de dados interna pode conter sem redimensionar.

Limpar () apenas

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

você pode fazer isso

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

5

Você pode usar o método claro

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

4

Você precisa da função Clear () na lista, assim.

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

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

myList.Clear() // Our list is now empty
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.