¿Cómo itero una colección .Net IList en orden inverso?
-
01-07-2019 - |
Pregunta
Tengo una IList que contiene elementos (padre primero), deben agregarse a un documento de diagrama en orden inverso para que el padre se agregue al final, dibujado en la parte superior para que sea lo primero que seleccione el usuario.
¿Cuál es la mejor manera de hacerlo?Algo mejor/más elegante de lo que estoy haciendo actualmente que publico a continuación.
Solución
Si tiene .NET 3.5, ¿podría usar LINQ's Reverse?
foreach(var item in obEvtArgs.NewItems.Reverse())
{
...
}
(Suponiendo que estás hablando de la IList genérica)
Otros consejos
Basado en los comentarios a la respuesta de davy, y La respuesta original de Gishu, podrías transmitir tu tipo débil System.Collections.IList
a una colección genérica usando el System.Linq.Enumerable.Cast
método de extensión:
var reversedCollection = obEvtArgs.NewItems
.Cast<IMySpecificObject>( )
.Reverse( );
Esto elimina el ruido tanto de la marcha atrás for
bucle, y el as
cast para obtener un objeto fuertemente tipado de la colección original.
NewItems es mi lista aquí...Aunque esto es un poco complicado.
for(int iLooper = obEvtArgs.NewItems.Count-1; iLooper >= 0; iLooper--)
{
GoViewBoy.Document.Add(CreateNodeFor(obEvtArgs.NewItems[iLooper] as IMySpecificObject, obNextPos));
}
No necesitas LINQ:
var reversed = new List<T>(original); // assuming original has type IList<T>
reversed.Reverse();
foreach (T e in reversed) {
...
}