Как перебрать коллекцию .Net IList в обратном порядке? - PullRequest
5 голосов
/ 18 сентября 2008

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

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

Ответы [ 4 ]

7 голосов
/ 18 сентября 2008

Если у вас есть .NET 3.5, вы можете использовать LINQ's Reverse?

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

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

2 голосов
/ 28 сентября 2008

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

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

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

0 голосов
/ 25 июня 2013

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

var reversed = new List<T>(original); // assuming original has type IList<T>
reversed.Reverse();
foreach (T e in reversed) {
  ...
}
0 голосов
/ 18 сентября 2008

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

for(int iLooper = obEvtArgs.NewItems.Count-1; iLooper >= 0; iLooper--)
            {
                GoViewBoy.Document.Add(CreateNodeFor(obEvtArgs.NewItems[iLooper] as IMySpecificObject, obNextPos));
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...