petter2012 Ответов: 1

Как отсортировать этот список в C#?


Привет,

Я пытаюсь отсортировать список в C#, используя следующий код:

bodylist = bodylist.OrderBy(a => a.Movable).ThenBy(a => a.Name);


Список, который я пытаюсь отсортировать - объявленный в том же классе - выглядит следующим образом:

static private List<Body> bodylist = new List<Body>();

static public IReadOnlyList<Body> Bodylist
{
    //the following code prohibits other code to make changes via Add or similar,
    //but basically it's a normal property without a setter.
    get { return new ReadOnlyCollection<Body>(bodylist); }
}


Объект Body найден (отображаются его свойства Movable и имя).

Однако единственный способ заставить код выполняться - это удалить блист слева от знака равенства. И если я это сделаю, список не будет отсортирован.

Сообщение об ошибке, которое я получаю с приведенным выше кодом, выглядит следующим образом:

"Невозможно неявно преобразовать тип' System. Linq.IOrderedEnumerable<xenia2d_wpf.body & gt;' to 'System.Коллекции.Generic.List<xenia2d_wpf.body>'. Существует явное преобразование (вы пропускаете приведение?)"


Моя цель состояла в том, чтобы отсортировать список сначала по логическому (подвижному), а затем по имени.

Я уверен, что есть какая-то простая синтаксическая ошибка, но я не знаю, что это такое, поэтому я был бы признателен за некоторую помощь. :)

Спасибо!

Петтер

Что я уже пробовал:

Я искал подобные примеры, но нашел только примеры, возвращающие списки, поэтому они на самом деле не соответствуют тому, что я пытаюсь сделать.

1 Ответов

Рейтинг:
11

P_Z

Привет, решение описано в сообщении об ошибке. Заказатьпо возвращает объект IEnumerable
см. ссылку: Перечислимый.Заказатьпо(Метод TKey) Способ (Интерфейс IEnumerable(Метод), Функция(Метод TKey)) (Системы.В LINQ)[^] где тогда вы должны привести к списку, который является типом bodylist.

static private List<Body> bodylist = new List<Body>();
bodylist = bodylist.OrderBy(a => a.Movable).ThenBy(a => a.Name).ToList();


petter2012

Привет,

Спасибо, Да, конечно! Я действительно заметил сообщение об ошибке, но забыл о ToList(). Вместо этого я попробовал (список)bodylist... но это не сработало.

Спасибо снова.