C # List <T>OrderBy всегда возвращает ноль - PullRequest
1 голос
/ 23 октября 2009

Вот мои настройки.

public class ItemList : List<Item>
{
  public void Load() {...}
  public void Save() {...}
}

Загрузка операций чтения из файла XML для заполнения ItemList

Затем я пытаюсь упорядочить список предметов по приоритету. Это инт? Однако для целей тестирования все элементы имеют различное значение.

ItemList itemList = new ItemList();
itemList.Load();

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority) as ItemList;

return newItemList;

В приведенном выше newItemList всегда null. У itemList есть счетчик 7. Я трижды проверил, и все элементы в экземпляре itemList имеют установленный приоритет.

Что я делаю не так?

Я тоже пробовал ...

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority)
                        .ToList() as ItemList;

Кажется, ничего не работает.

Заранее спасибо!

Ответы [ 4 ]

7 голосов
/ 23 октября 2009

Проблема в том, что OrderBy не возвращает ItemList, он возвращает IOrderedEnumerable, а ToList () не возвращает ItemList, он возвращает List. В любом случае, вы пытаетесь привести оба к ItemList, а они нет, поэтому вы получаете ноль.

ItemList someList = (new ItemList {new Item(2), new Item(1), new Item(3)});

//this returns an IOrderedEnumerable<Item>
var result = someList.OrderBy(i => i.Priority); 

//this returns a List<Item>
var otherResult = someList.ToList(); 
2 голосов
/ 23 октября 2009

Ни OrderBy, ни ToList не возвращают ItemList, поэтому приведение возвращает null, как указал Джозеф.

Поскольку вы наследуете класс List<T>, вы можете просто использовать метод Sort для его сортировки:

ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;
0 голосов
/ 23 октября 2009

Операторы LINQ не работают на месте для вашего объекта newItemList. Они создают и возвращают новые объекты. Если вы хотите выполнить сортировку на месте, вы должны использовать метод Sort () List <>.

0 голосов
/ 23 октября 2009

Я думаю, что ваша проблема "as ItemList".

...