Como faço para iterate uma coleção .Net IList na ordem inversa?
-
01-07-2019 - |
Pergunta
Eu tenho um IList que contém itens (pai primeiro), eles precisam ser adicionados a um diagrama na ordem inversa para que o pai é adicionado por último, desenhado na parte superior de modo que é a primeira coisa a ser selecionado pelo o usuário.
Qual é a melhor maneira de fazê-lo? Algo melhor / mais elegante do que o que eu estou fazendo atualmente que eu posto abaixo ..
Solução
Se você tiver NET 3.5 você poderia usar reverso do LINQ?
foreach(var item in obEvtArgs.NewItems.Reverse())
{
...
}
(Supondo que você está falando sobre o IList genérico)
Outras dicas
Com base nos comentários a de Davy resposta , e resposta original do Gishu , você pode lançar o seu System.Collections.IList
fracamente tipado para uma coleção genérica utilizando o método de extensão System.Linq.Enumerable.Cast
:
var reversedCollection = obEvtArgs.NewItems
.Cast<IMySpecificObject>( )
.Reverse( );
Isso remove o ruído de ambos o loop for
inversa, eo elenco as
para obter um objeto fortemente tipado da coleção original.
newitems é a minha lista aqui ... Este é um desajeitado pouco embora.
for(int iLooper = obEvtArgs.NewItems.Count-1; iLooper >= 0; iLooper--)
{
GoViewBoy.Document.Add(CreateNodeFor(obEvtArgs.NewItems[iLooper] as IMySpecificObject, obNextPos));
}
Você não precisa LINQ:
var reversed = new List<T>(original); // assuming original has type IList<T>
reversed.Reverse();
foreach (T e in reversed) {
...
}