Вопрос

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

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 < >.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top