Список C # < T > OrderBy всегда возвращает ноль
-
06-07-2019 - |
Вопрос
Вот мои настройки.
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;
Кажется, ничего не работает.
Заранее спасибо!
Решение
Ни OrderBy, ни ToList не возвращают ItemList, поэтому приведение возвращает null, как указал Джозеф.
Поскольку вы наследуете от класса List < T >
, вы можете просто использовать метод Sort для его сортировки:
ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;
Другие советы
Проблема в том, что 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();
Я думаю, что ваша проблема связана с " как ItemList ".
Операторы LINQ не работают на месте для вашего объекта newItemList. Они создают и возвращают новые объекты. Если вы хотите выполнить сортировку на месте, вы должны использовать метод Sort () List < >.