как заказать List‹T› через дочерний элемент строки?

Я должен упорядочить список в соответствии со строкой, содержащейся в каждом элементе списка.

У меня есть элемент лентыDropDown, который содержит список элементов лентыDropDownItem. Каждый из этих элементов содержит строку, из которой я хочу изменить порядок позиции элемента в лентеDropDown в алфавитном порядке. Я думаю, что мою проблему можно решить, просто учитывая, что у меня есть список объектов, содержащих строковое поле.

Я пробовал это:

List<myObject> myList = aList;
myList.OrderBy(i => i.Name, StringComparer.Ordinal);

а также

myList.OrderBy(i => i.Name);

Я ожидаю, что результатом будет порядок от a->z или z->a в зависимости от используемого мной метода (OrderBy или OrderBy по убыванию). На данный момент мой результат такой же, как в моем списке до операции.

Можно ли использовать этот метод для этого или я должен использовать что-то еще? Я бы не хотел использовать цикл for.


person Ystalio Di Staniovich    schedule 16.07.2019    source источник
comment
Думайте о OrderBy как о string.Replace. Он не изменяет исходную строку — он создает новую. Вызов OrderBy вообще не меняет список. Он создает новый IEnumerable<T>, который содержит те же элементы, что и исходный список, но в другом порядке.   -  person Scott Hannen    schedule 16.07.2019


Ответы (1)


Вам нужно переназначить возврат .OrderBy() в исходный список.

myList = myList.OrderBy(i => i.Name).ToList();

.OrderBy() не изменяет существующий список, он возвращает входной список с изменениями как новый IEnumerable<>.

person Matt Rowland    schedule 16.07.2019