web-dev-qa-db-de.com

c # Versucht, eine Liste umzukehren

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();
}

Das Gegenteil funktioniert nicht:

Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'

Irgendwelche Ideen, warum das sein könnte?

82
Tom Gullen

Versuchen:

NavItems.Reverse();
return NavItems;

List<T>.Reverse() ist ein in-place reverse; Es wird keine neue Liste zurückgegeben.

Dies bewirkt im Gegensatz zu LINQ, wo Reverse() die umgekehrte Reihenfolge zurückgibt , aber wenn es ein geeignetes non gibt -Erweiterungsmethode Es wird immer anstelle einer Erweiterungsmethode ausgewählt. Im LINQ-Fall müsste es außerdem sein:

return someSequence.Reverse().ToList();
132
Marc Gravell

Eine Problemumgehung wäre Return NavItems.AsEnumerable().Reverse();

88
Mafu Josh

.Reverse() in einer Liste kehrt die Elemente in der Liste um. Es wird keine neue umgekehrte Liste zurückgegeben.

19

Reverse() gibt keine umgekehrte Liste selbst zurück, sondern ändert die ursprüngliche Liste. Also schreibe es wie folgt um:

return NavItems.Reverse(); 

ZU

NavItems.Reverse(); 
return NavItems;
8
sll

Reverse() gibt keine Liste zurück, wie von Ihrer Funktion erwartet.

NavItems.Reverse();
return NavItems;
6
JK.

.Reverse kehrt das "In-Place" um ..., versuchen Sie es

NavItems.Reverse();
return NavItems;
3
Yahia

Wenn Sie eine Liste wie in Ihrem Beispiel haben:

List<Lite.CategoryNavItem> NavItems

Mit der generischen Reverse <> -Erweiterungsmethode können Sie eine neue Liste zurückgeben, ohne die ursprüngliche zu ändern. Verwenden Sie einfach die folgende Erweiterungsmethode:

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

Anmerkungen: Sie müssen die <> generischen Tags angeben, um die Erweiterungsmethode explizit zu verwenden. Vergiss das nicht

using System.Linq;
2
MLH