c # Попытка перевернуть список - PullRequest
79 голосов
/ 08 августа 2011
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>'

Есть идеи, почему это может быть?

Ответы [ 7 ]

128 голосов
/ 08 августа 2011

Попробуйте:

NavItems.Reverse();
return NavItems;

List<T>.Reverse() - обратный ход на месте ; новый список не возвращается.

Это делает отличие от LINQ, где Reverse() возвращает обратную последовательность, но когда есть подходящий метод без расширения, он всегда выбран в предпочтении метода расширения. Кроме того, в случае LINQ это должно быть:

return someSequence.Reverse().ToList();
85 голосов
/ 07 октября 2014

Один обходной путь будет Return NavItems.AsEnumerable().Reverse();

18 голосов
/ 08 августа 2011

.Reverse() в списке переворачивает элементы в списке, он не возвращает новый перевернутый список.

8 голосов
/ 08 августа 2011

Reverse() не возвращает сам перевернутый список, он изменяет исходный список.Поэтому перепишите его следующим образом:

return NavItems.Reverse(); 

TO

NavItems.Reverse(); 
return NavItems;
6 голосов
/ 08 августа 2011

Reverse() не возвращает список, ожидаемый от вашей функции.

NavItems.Reverse();
return NavItems;
3 голосов
/ 08 августа 2011

.Reverse отменяет "на месте" ..., попробуйте

NavItems.Reverse();
return NavItems;
2 голосов
/ 10 октября 2018

Если у вас есть список, как в вашем примере:

List<Lite.CategoryNavItem> NavItems

Вы можете использовать универсальный метод Reverse <> extensions, чтобы вернуть новый список без модификации исходного.Просто используйте метод расширения следующим образом:

List<Lite.CategoryNavItem> reversed = NavItems.Reverse<Lite.CategoryNavItem>();

Примечания. Вам необходимо указать общие теги <>, чтобы явно использовать метод расширения.Не забудьте

using System.Linq;
...