Как мне выполнить итерацию коллекции .Net IList в обратном порядке?

StackOverflow https://stackoverflow.com/questions/90996

  •  01-07-2019
  •  | 
  •  

Вопрос

У меня есть IList, который содержит элементы (сначала родительские), их нужно добавить в документ диаграммы в обратном порядке, чтобы родительский элемент был добавлен последним, нарисованный сверху, чтобы это было первое, что должен выбрать пользователь.

Каков наилучший способ сделать это?Что-то лучшее / более элегантное, чем то, что я делаю сейчас что я публикую ниже..

Это было полезно?

Решение

Если у вас .NET 3.5, вы могли бы использовать обратный LINQ?

foreach(var item in obEvtArgs.NewItems.Reverse())
{
   ...
}

(Предполагая, что вы говорите об общем IList)

Другие советы

Основываясь на комментариях к Ответ Дэви, и Оригинальный ответ Гишу, вы могли бы использовать свой слабо типизированный System.Collections.IList к универсальной коллекции с использованием System.Linq.Enumerable.Cast способ расширения:

var reversedCollection = obEvtArgs.NewItems
  .Cast<IMySpecificObject>( )
  .Reverse( );

Это устраняет шум как при обратном, так и при обратном for цикл, и as приведение для получения строго типизированного объекта из исходной коллекции.

NewItems - это мой список здесь...Хотя это немного неуклюже.

for(int iLooper = obEvtArgs.NewItems.Count-1; iLooper >= 0; iLooper--)
            {
                GoViewBoy.Document.Add(CreateNodeFor(obEvtArgs.NewItems[iLooper] as IMySpecificObject, obNextPos));
            }

Вам не нужен LINQ:

var reversed = new List<T>(original); // assuming original has type IList<T>
reversed.Reverse();
foreach (T e in reversed) {
  ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top