Сортировка списка при поиске всех c#

#c#

#c#

Вопрос:

Я использую FindAll() метод, который возвращает правильный список

 List<AudioSource> playing = AudioSourceRegistry.FindAll(src => src.isPlaying == true);
  

но при попытке отсортировать список с помощью

 List<AudioSource> playing = AudioSourceRegistry.FindAll(src => src.isPlaying == true)
    .Sort(delegate (AudioSource a1, AudioSource a2)
    {
        return a1.mixerIndex.CompareTo(a2.mixerIndex);
    }); 
  

или

 List<AudioSource> playing = AudioSourceRegistry.FindAll(src => src.isPlaying == true)
    .Sort(a1, a2 => a1.mixerIndex.CompareTo(a2.mixerIndex)); 
  

приводит к ошибке

Описание кода серьезности Ошибка состояния подавления строки файла проекта CS0029 Не удается неявно преобразовать тип ‘void’ в ‘System.Коллекции.Generic.List’

Сортировка не возвращает список?

Как я могу отсортировать результат FindAll() ?

Комментарии:

1. Каков возвращаемый тип Sort ?

2. Проверьте документ списка.Отсортируйте

Ответ №1:

FindAll возвращает новый список, но Sort сортирует список на месте (и таким образом возвращает void ).

Вы можете сделать:

 List<AudioSource> playing = AudioSourceRegistry.FindAll(src => src.isPlaying);
playing.Sort(a1, a2 => a1.mixerIndex.CompareTo(a2.mixerIndex));
  

В качестве альтернативы вы можете использовать Linq OrderBy вместо List Sort (который возвращает отсортированное перечисляемое значение, а не сортирует его на месте). Если вы делаете это, стоит использовать Linq Where вместо List FindAll , поскольку это позволяет избежать создания ненужного промежуточного списка:

 List<AudioSource> playing = AudioSourceRegistry
    .Where(src => src.isPlaying)
    .OrderBy(src => src.mixerIndex)
    .ToList();
  

Комментарии:

1. Сортировка списка работает, если я использую метод отмены статуса воспроизведения. Сортировать(делегировать (аудиоисточник a1, аудиоисточник a2) { вернуть a1.mixerIndex.compareTo(a2.mixerIndex); });

2. @garrilla Это может сработать, но это изменяет исходную коллекцию, которая, согласно вашему вопросу, не соответствует вашим ожиданиям.

3. @vc74 Я подозреваю, что он вызывал playing.Sort из списка, который был возвращен из FindAll — то есть из моего первого решения — и это нормально.