Как мне выполнить итерацию коллекции .Net IList в обратном порядке?
-
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) {
...
}