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 ..

Foi útil?

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) {
  ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top