Le temps de réponse ici est plus rapide qu'il ne l'aurait été pour lire / rechercher MSDN
V4Vendetta
27
De plus, la réponse est maintenant plus facile à trouver ici que MSDN.
Matt Connolly
14
Sans parler du fait que si vous Google .net empty list, cette page apparaît avant MSDN!
Vivian River
2
@ V4Vendetta En 2018, je suggérerais que StackOverflow crée probablement un Bot qui mettra votre commentaire sur n'importe quel fil qui a un lien vers MSDN doc dans les commentaires ...
... si la liste est en fait un List<>, ArrayListou des outils IList. ;)
Lucero
3
@Lucero est-il appelé comme une liste si ce n'est ni l'un ni l'autre?
Srinivas Reddy Thatiparthy
16
Comme il s'agit d'un succès sur Google et que je rencontre ce problème, je suis nécro de le commenter. Si vous utilisez la même liste dans une boucle et utilisez clear, la liste gardera souvent des références à d'anciens objets - je finis souvent par utiliser = new LisT <T> (); en raison du fait qu'il efface toutes les anciennes allocations instantanément. Pour la plupart des gens cependant, .Clear (); suffira, mais si vous trouvez une liste agissant étrangement - essayez d'utiliser = new List <T> () ;.
Charles
1
Je vais doubler le necrocommenter cela parce que des informations erronées ont été fournies ici à partir de 2020. List<T>.Clearefface correctement toutes les références, ce qui permet au GC d'effacer les allocs si nécessaire. new List<T>ne fait PAS cela et ne convient pas à tous les scénarios
Jean
28
Si par "liste" vous entendez a List<T>, alors la méthode Clear est ce que vous voulez:
List<string>list=...;...list.Clear();
Vous devriez prendre l'habitude de rechercher la documentation MSDN sur ces choses.
Voici comment rechercher rapidement de la documentation sur divers bits de ce type:
List Class - fournit la List<T>classe elle-même ( c'est là que vous auriez dû commencer )
"Tous ces listes contiennent un ensemble de liens, mais vous voulez généralement le premier." A moins que vous ne souhaitiez vider la liste?
un CVn
Désolé, j'aurais dû être plus clair. Vous voulez généralement le premier lien que Google vous donne, pas la "Classe de liste".
Lasse V. Karlsen
9
Pour donner une réponse alternative (Qui a besoin de 5 réponses égales?):
list.Add(5);// list contains at least one element nowlist=newList<int>();// list in "list" is empty now
Gardez à l'esprit que toutes les autres références à l'ancienne liste n'ont pas été effacées (selon la situation, cela peut être ce que vous souhaitez). De plus, en termes de performances, il est généralement un peu plus lent.
Pouvez-vous vérifier que le paramètre list = new List <> () est en fait plus lent que list.Clear () ;? Selon MSDN (lien ci-dessous) list.Clear (); est une opération O (N), et je ne peux pas imaginer que l'instanciation d'une nouvelle liste prendrait plus de temps que cela. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris Tramel
5
DotNetPerls a fait un benchmark et a constaté que la nouvelle liste <> est plus rapide. dotnetperls.com/list-clear
Gerhard Powell
Par extension, soyez également conscient qu'il y lista une nouvelle référence. Ne l'utilisez donc pas si vous utilisez un verrou sur cette liste.
jeromej
9
Option 1: Utilisez la fonction Clear () pour vider List<T>et conserver sa capacité.
Count est défini sur 0 et les références à d'autres objets des éléments de la collection sont également libérées.
La capacité reste inchangée.
Option # 2 - Utilisez les fonctions Clear () et TrimExcess () pour définir List<T>l'état initial.
Count est défini sur 0 et les références à d'autres objets des éléments de la collection sont également libérées.
Le rognage d'un vide List<T>définit la capacité de la liste sur la capacité par défaut.
Définitions
Count = nombre d'éléments qui se trouvent réellement dans leList<T>
Capacité = nombre total d'éléments que la structure de données interne peut contenir sans redimensionnement.
.net empty list
, cette page apparaît avant MSDN!Réponses:
C'est vraiment simple:
la source
List<>
,ArrayList
ou des outilsIList
. ;)List<T>.Clear
efface correctement toutes les références, ce qui permet au GC d'effacer les allocs si nécessaire.new List<T>
ne fait PAS cela et ne convient pas à tous les scénariosSi par "liste" vous entendez a
List<T>
, alors la méthode Clear est ce que vous voulez:Vous devriez prendre l'habitude de rechercher la documentation MSDN sur ces choses.
Voici comment rechercher rapidement de la documentation sur divers bits de ce type:
List<T>
classe elle-même ( c'est là que vous auriez dû commencer )Toutes ces requêtes Google répertorient un ensemble de liens, mais vous voulez généralement le premier que google vous donne dans chaque cas.
la source
Pour donner une réponse alternative (Qui a besoin de 5 réponses égales?):
Gardez à l'esprit que toutes les autres références à l'ancienne liste n'ont pas été effacées (selon la situation, cela peut être ce que vous souhaitez). De plus, en termes de performances, il est généralement un peu plus lent.
la source
list
a une nouvelle référence. Ne l'utilisez donc pas si vous utilisez un verrou sur cette liste.Option 1: Utilisez la fonction Clear () pour vider
List<T>
et conserver sa capacité.Option # 2 - Utilisez les fonctions Clear () et TrimExcess () pour définir
List<T>
l'état initial.Définitions
Count = nombre d'éléments qui se trouvent réellement dans le
List<T>
Capacité = nombre total d'éléments que la structure de données interne peut contenir sans redimensionnement.
Effacer () uniquement
Clear () et TrimExcess ()
la source
vous pouvez le faire
la source
Vous pouvez utiliser la méthode claire
la source
Vous avez besoin de la fonction Clear () sur la liste, comme ça.
la source