Comment inverser une liste générique sans changer la même liste?
J'ai une liste générique qui est utilisé à l'intérieur d'une méthode qui est appelée 4 fois. Cette méthode écrit un tableau dans un document PDF avec les valeurs de cette liste générique.
Mon problème est que j'ai besoin pour inverser cette liste générique à l'intérieur de la méthode, mais je vais appeler la méthode 4 fois tellement la liste est inversé à chaque fois que j'appel de la méthode et je n'en veux pas... que puis-je faire? Est-il un moyen de renverser la liste sans la mutation de l'original?
C'est à l'intérieur de la méthode:
t.List.Reverse();
foreach (string t1 in t.List)
{
//Some code
}
source d'informationauteur Phoenix_uy
Vous devez vous connecter pour publier un commentaire.
"Facile" option serait de simplement effectuer une itération de la liste dans l'ordre inverse sans changer la liste elle-même au lieu d'essayer d'inverser la première fois, et est connu pour ne rien les autres fois:
En utilisant LINQ
Reverse
méthode au lieu de laList
Inverse, on peut le parcourir à l'envers sans la mutation de la liste. LeAsEnumerable
doit être là pour empêcher leList
Reverse
méthode.Vous demandez comment créer une copie inverse de la liste, sans mutation de l'original.
LINQ peut le faire:
Vous pouvez faire une des deux choses. Soit prendre l'inversion de la liste à partir de la méthode et de l'inverse de la liste une fois avant d'appeler la méthode quatre fois, ou faire:
Qui prend une copie de la liste avant de reculer afin de ne pas toucher à l'original de la liste.
Je conseille la première approche, car maintenant vous appelez à l'Inverse quatre fois au lieu d'une seule fois.
Toutes les options jusqu'à maintenant en interne copier tous les éléments d'une liste dans l'ordre inverse, explicite
new_list.Reverse()
ou implicitet.List.AsEnumerable().Reverse()
. Je préfère quelque chose qui n'a pas ce coût que l'extension de la méthode ci-dessous.Et pourrait être utilisé comme