web-dev-qa-db-fra.com

c # Essayer d'inverser une liste

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

L'inverse ne fonctionne pas:

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

Des idées pourquoi cela pourrait être?

82
Tom Gullen

Essayer:

NavItems.Reverse();
return NavItems;

List<T>.Reverse() est une inversion sur place ; il ne retourne pas une nouvelle liste.

Ceci fait un contraste avec LINQ, où Reverse() renvoie la séquence inversée, mais quand il existe une méthode non-extension appropriée, elle est toujours sélectionnée de préférence à une méthode d'extension. De plus, dans le cas LINQ, il faudrait que:

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

Une solution de contournement serait Return NavItems.AsEnumerable().Reverse();

88
Mafu Josh

.Reverse() sur une liste annule les éléments de la liste, il ne renvoie pas de nouvelle liste inversée.

19
Kieren Johnstone

Reverse() ne renvoie pas la liste inversée elle-même, il modifie la liste d'origine. Donc, réécrivez-le comme suit:

return NavItems.Reverse(); 

À

NavItems.Reverse(); 
return NavItems;
8
sll

Reverse() ne renvoie pas une liste comme prévu de votre fonction.

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

.Reverse inverse le "in-place" ..., essayez

NavItems.Reverse();
return NavItems;
3
Yahia

Si vous avez une liste comme dans votre exemple:

List<Lite.CategoryNavItem> NavItems

Vous pouvez utiliser la méthode générique Reverse <> extensions pour renvoyer une nouvelle liste sans modifier celle d'origine. Utilisez simplement la méthode d'extension comme ceci:

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

Remarques: Vous devez spécifier les balises génériques <> pour utiliser explicitement la méthode d'extension. N'oublie pas le

using System.Linq;
2
MLH