Comment itérer une collection .Net IList dans l'ordre inverse?
-
01-07-2019 - |
Question
J'ai un IList qui contient des éléments (parent en premier), ils doivent être ajoutés à un document de diagramme dans l'ordre inverse afin que le parent soit ajouté en dernier, puis dessiné en haut de sorte qu'il soit sélectionné en premier par l'utilisateur.
Quelle est la meilleure façon de le faire? Quelque chose de mieux / plus élégant que ce que je fais actuellement que je poste ci-dessous ..
La solution
Si vous avez .NET 3.5, vous pouvez utiliser la fonction Reverse de LINQ?
foreach(var item in obEvtArgs.NewItems.Reverse())
{
...
}
(En supposant que vous parlez du IList générique)
Autres conseils
D'après les commentaires de réponse de Davy et La réponse originale de Gishu , vous pouvez convertir votre System.Collections.IList
faiblement typé vers une collection générique à l'aide du . Méthode d'extension System.Linq.Enumerable.Cast
:
var reversedCollection = obEvtArgs.NewItems
.Cast<IMySpecificObject>( )
.Reverse( );
Ceci supprime le bruit de la boucle inverse pour
et de la conversion en tant que
pour obtenir un objet fortement typé de la collection d'origine.
NewItems est ma liste ici ... C'est un peu maladroit cependant.
for(int iLooper = obEvtArgs.NewItems.Count-1; iLooper >= 0; iLooper--)
{
GoViewBoy.Document.Add(CreateNodeFor(obEvtArgs.NewItems[iLooper] as IMySpecificObject, obNextPos));
}
Vous n'avez pas besoin de LINQ:
var reversed = new List<T>(original); // assuming original has type IList<T>
reversed.Reverse();
foreach (T e in reversed) {
...
}