#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
— то есть из моего первого решения — и это нормально.