public class CategoryNavItem
{
public int ID { get; set; }
public string Name { get; set; }
public string Icon { get; set; }
public CategoryNavItem(int CatID, string CatName, string CatIcon)
{
ID = CatID;
Name = CatName;
Icon = CatIcon;
}
}
public static List<Lite.CategoryNavItem> getMenuNav(int CatID)
{
List<Lite.CategoryNavItem> NavItems = new List<Lite.CategoryNavItem>();
-- Snipped code --
return NavItems.Reverse();
}
Обратное не работает:
Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'
Есть идеи, почему это может быть?
List<int> list
, тоlist.Reverse()
вызывает версию на месте. Затем другой разработчик проявляет особую смекалку и меняет объявление наIList<int>
. Это очень неожиданно нарушает код, потому что тогда используетсяIEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)
перегрузка функции , и это остается незамеченным - вам придется следить за неиспользованным возвращаемым значением, а это редко практикуется в C #Один обходной путь был бы
Return NavItems.AsEnumerable().Reverse();
источник
.Reverse()
в списке меняет местами элементы в списке, он не возвращает новый перевернутый список.источник
Reverse()
не возвращает сам обратный список, он изменяет исходный список. Так что перепишите его следующим образом:return NavItems.Reverse();
К
NavItems.Reverse(); return NavItems;
источник
Reverse()
не возвращает список, как ожидалось от вашей функции.NavItems.Reverse(); return NavItems;
источник
.Reverse
меняет местами "на месте" ... попробуйтеNavItems.Reverse(); return NavItems;
источник
Если у вас есть список, как в вашем примере:
Вы можете использовать общий метод расширений Reverse <>, чтобы вернуть новый список, не изменяя исходный. Просто используйте такой метод расширения:
Примечания. Чтобы явно использовать метод расширения, необходимо указать общие теги <>. Не забывайте
using System.Linq;
источник