J'apprends le C#.
Si je crée d'abord une variable pour contenir une liste.
List<int> mylist = new List<int>();
Disons que j'ai fait un certain travail avec la liste, et que maintenant je veux effacer la liste pour l'utiliser pour quelque chose d'autre :
Méthode 1 :
mylist.Clear();
Méthode 2 :
mylist = new List<int>();
Le but est juste de vider toutes les valeurs de la liste pour réutiliser la liste.
Y a-t-il des effets secondaires à l'utilisation de la méthode 2 ? Dois-je privilégier une méthode plutôt qu'une autre ?
J'ai également trouvé une question similaire, Utilisation de la méthode "claire" vs. Nouvel objet Je laisserai les autres lecteurs décider de ce qui est le mieux pour leur propre cas d'utilisation. Je ne vais donc pas choisir une réponse correcte.
1 votes
Si vous le faites
List<int> mylist = new List<int>();
Vous créez ainsi une nouvelle liste prête à l'emploi. Il n'est pas nécessaire de l'effacer, elle est prête à être utilisée, il suffit d'y accéder par l'intermédiaire de votre variable (mylist
) qui y fait référence. Si vous réaffectez la liste (mylist = new List<int>();
), alors l'ancienne liste n'est plus référencée par votre code (s'il n'y a pas d'autres références à cette liste, alors elle est prête pour la fonction Collecte des ordures ) et vous créez une nouvelle liste. Votre listemylist
contient maintenant une référence à cette nouvelle liste, et elle est prête à être utilisée de la même manière.0 votes
L'effacement permettra d'éviter l'allocation et la collecte inutiles de GC, mais laissera plus de mémoire allouée ... la question est donc principalement basée sur l'option : vitesse vs utilisation de la mémoire.
3 votes
Le seul autre facteur réel est la présence d'autres références partagées dans cette liste. Si vous l'effacez, ces références continuent d'utiliser la liste partagée. En l'effaçant, cette partie du code abandonne l'ancienne liste et commence à en utiliser une nouvelle, de sorte que les modifications apportées après ce point ne seront pas reflétées dans les autres références partagées.